Проверяет опыт работы с воркерами.
Создайте общий context.Context и передайте его всем воркерам. Каждый воркер в select слушает <-ctx.Done() и завершает работу, завершая весь пул одним сигналом отмены.
Идея: контекст — механизм широковещательной отмены.
Шаги:
В main создать ctx, cancel := context.WithCancel(parent);
Передать ctx всем воркерам при запуске;
Внутри воркера: select { case <-ctx.Done(): return … }.
Пример:
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for i := 0; i < N; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
return
case job := <-jobs:
_ = handle(job)
}
}
}(i)
}
// ... по сигналу:
cancel()Особенности:
закрытие Done() — broadcast для всех горутин;
завершайте фоновые операции и закрывайте каналы.
Вывод: общий контекст обеспечивает синхронную, безопасную остановку пула воркеров.