context.WithoutCancel
Вопрос
Обработчик HTTP после ответа запускает фоновую запись в аудит с r.Context(), и запись иногда обрывается с context canceled. Что исправит проблему, сохранив значения контекста (trace id)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
context.WithoutCancel(r.Context()): значения есть, отмены нетправильный ответcontext.Background(): он не отменяется и наследует значения запросаcontext.TODO(): заглушка, которая копирует значения запроса- Увеличить WriteTimeout сервера, чтобы контекст жил дольше
Разбор
Контекст запроса отменяется, когда обработчик вернулся или клиент ушёл, поэтому фоновая работа с ним обрывается. WithoutCancel даёт потомка, который видит значения родителя, но без его отмены и дедлайна, и к нему можно добавить свой таймаут. Background и TODO не отменяются, но теряют trace id и прочие значения. WriteTimeout не влияет на отмену контекста после завершения обработчика.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.