3 штуки
Есть бесконечный пул задач
Рабочие проверяют буферизированный канал, в который пишутся задачи:
for task := range tasks {
taskChannel <- task
}
По некоторым причинам рабочий может завершить свое выполнение. В таком случае он положит свою ошибку в буферизированный канал, предназначенный для ошибок.
При завершении всех рабочих, программа не завершается по причине того, что канал с задачами переполнен, в него пытаются записать еще задач, но его никто не читает
Как быть в такой ситуации?
В селект впихиваете кейс с Done из контекста. И все прерывается.
Обсуждают сегодня