Доработать worker pool:
Внутри каждой горутины слушать
ctx.Done
из
context.context
, который вы передадите в каждую рутину, кроме того еще создать cancel() функцию, которую вы будете вызывать в случае если вам надо...
При вызове данной функции все горутины получат уведомление в select и завершатся.
Как будет выглядеть горутина: бесконечный цикл, внутри селект на ваш канал с jobs и на ctx.Done(), если ctx.Done() не пришел (вызван будет например ошибкой в др местах), то будет читаться канал с джобами, но если придет ctx.Done() , то делать return
for {
select {
case job := <-jobs:
// work with job
case <-ctx.Done():
c.logger.Errorf("shutdown cancelled: %v", ctx.Err())
return // выход из горутины
}
}
}