Comments 1
Спасибо за статью.
Немного подушню :-) В воркерах я бы добавил проверку, что канал не был закрыт, и прокинул бы контекст дальше в целевую функцию (ну и обрабатывать отмену там тоже), а то в случае если контекст будет отменен после того, как мы провалились в функцию, воркер не закончит работу пока она не доработает.
func worker(ctx context.Context, jobs <-chan Job) {
for {
select {
case job, ok := <-jobs:
if !ok {
return
}
processJob(ctx, job)
case <-ctx.Done():
log.Println("Worker shutting down")
return
}
}
}
func processJob(ctx context.Context , job Job) {
ch := make(chan {}struct)
go func() {
// Вот тут что-нить тяжелое
close(ch)
}
select {
case <-ch:
return
case <-ctx.Done():
return
}
}
Sign up to leave a comment.
Каналы(channels) в Go