Ожидание отправки должно выбирать между result <- value и ctx.Done(). Отмену также передавайте в сетевые операции и проверяйте между длительными этапами.
Как обработать отмену запроса в pipeline
Ожидание отправки должно выбирать между result <- value и ctx.Done(). Отмену также передавайте в сетевые операции и проверяйте между длительными этапами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Обработчик Go передаёт context в цепочку загрузки и обработки данных. Пользователь закрыл запрос, пока worker ожидает отправки результата в канал. Как не оставить зависшую goroutine?
Ответ
Ожидание отправки должно выбирать между result <- value и ctx.Done(). Отмену также передавайте в сетевые операции и проверяйте между длительными этапами.
Нельзя рассчитывать только на закрытие входного канала: worker может уже блокироваться на выходе. Владельцы каналов должны быть определены, чтобы не возникала отправка после close. Cancel сам по себе не останавливает CPU-цикл; для тяжёлой работы нужны кооперативные проверки и, при необходимости, ограничение времени.