Выбор ответа Middle Паттерны конкурентности спрашивают часто обновлено

Что даёт errgroup.WithContext

Вопрос

Чем errgroup.WithContext удобнее sync.WaitGroup?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Wait отдаёт первую ошибку, ctx отменяется, SetLimit держит лимит. g.Go(f) запускает задачу, g.Wait() ждёт всех и возвращает первую не-nil ошибку.

Варианты ответа

  1. Он автоматически перезапускает упавшие задачи с бэкоффом
  2. Wait отдаёт первую ошибку, ctx отменяется, SetLimit держит лимитправильный ответ
  3. Он собирает все ошибки задач в слайс и возвращает их из Wait разом
  4. Он запускает задачи в пуле потоков ОС, а не в горутинах

Разбор

g.Go(f) запускает задачу, g.Wait() ждёт всех и возвращает первую не-nil ошибку. Контекст из WithContext отменяется на первой ошибке (и после Wait), поэтому задачи, которые слушают ctx, прекращают работу. SetLimit(n) блокирует Go, пока активных задач n. Перезапусков нет, все ошибки не собираются (для этого errors.Join вручную), горутины обычные.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.