@danforth

Первая ошибка, или ждем все гоурутины, как сделать?

Не могу сообразить: есть три гоурутины, две из них идут в базу и делают запросы, а одна парсит шаблон.

Мне необходимо сделать так, чтобы если хотя бы одна из этих гоурутин вернула ошибку, то сразу отправить ответ клиенту об ошибке, не дожидаясь конца работы остальных гоурутин.

Если же никаких ошибок в канал не поступало, тогда ждем пока все гоурутины отработают, и тогда шаблон воспользуется результатом двух других гоурутин.

Натолкните на мысль как это сделать.

upd.:
Пришел в голову такой вариант:
- создаем буферизированный канал с ошибками (длина канала = кол-ву гоурутин, чтобы не было утечки гоурутин)
- создаем sync.WaitGroup
- делаем select, где либо читаем из канала ошибку, обрабатываем её и возвращаемся, либо ждем пока WaitGroup.Done(), и работаем как обычно

Как-то так: https://play.golang.org/p/SBfuM-VChhU

Есть ли тут подводные камни, можно ли как-то улучшить конструкцию?
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
bitver
@bitver
Если это вы про сервер, то используйте Context
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы