DrainWithTimeout: ждать с границей
Ждать вечно при зависшем воркере — тоже баг. Реализуйте drainWithTimeout(wg *sync.WaitGroup, timeout) bool: ждать wg через done-канал или таймаут.
Показать решение
GolangРешение
func drainWithTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {
done := make(chan struct{})
go func() {
wg.Wait()
close(done)
}()
select {
case <-done:
return true
case <-time.After(timeout):
return false
}
}Записаться на разбор
10 000 ₽ · 60 минут · онлайн