Выбор ответа Senior context обновлено

context.AfterFunc

Вопрос

Что делает stop := context.AfterFunc(ctx, f) (Go 1.21)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: После отмены ctx запускает f в своей горутине; stop снимает. AfterFunc регистрирует колбэк на отмену: когда ctx отменён, f запускается в своей горутине.

Варианты ответа

  1. Вызывает f через заданное время, как time.AfterFunc
  2. После отмены ctx запускает f в своей горутине; stop снимаетправильный ответ
  3. Отменяет ctx после того, как f завершится, и возвращает stop
  4. Вызывает f синхронно в момент отмены в горутине, которая отменила ctx

Разбор

AfterFunc регистрирует колбэк на отмену: когда ctx отменён, f запускается в своей горутине. Вызов stop() возвращает true, если удалось отвязать f до запуска. Удобно, чтобы прервать операцию, которая сама context не понимает, например закрыть соединение или разбудить sync.Cond. Таймеров и обратной отмены ctx здесь нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.