tgoop.com/go_interview_lib/364
Create:
Last Update:
Last Update:
💬 Как использовать context.AfterFunc для выполнения функции после отмены контекста и что происходит, если контекст уже отменен?
В Go функция context.AfterFunc
(Go 1.21 +) позволяет запланировать выполнение функции после завершения контекста, будь то из-за отмены или тайм-аута. Она запускает функцию в новой горутине сразу после того, как канал ctx.Done
родительского контекста отправляет сигнал.
📌 Пример использования:
ctx, cancel := context.WithTimeout(parentCtx, 5*time.Second)
defer cancel()
stop := context.AfterFunc(ctx, func() {
fmt.Println("Cleanup operations after context is done")
})
Если контекст уже отменен на момент вызова
AfterFunc
, функция f
будет выполнена немедленно в новой горутине.Функция
stop()
позволяет отменить запланированную функцию, если она еще не начала выполняться. Если stop()
возвращает true
, это означает, что функция была успешно остановлена до выполнения. Если stop()
возвращает false
, это означает, что функция уже начала выполняться или была остановлена ранее.📌 Пример использования
stop()
:
stop := context.AfterFunc(ctx, func() {
// some cleanup code
})
if stopped := stop(); stopped {
fmt.Println("Remove the callback before context is done")
}
Функция
AfterFunc
полезна для выполнения задач очистки, логирования или других операций, которые необходимо выполнить после отмены контекста.BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/364