РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1370 of 1593 menu

Функция context.AfterFunc

Функция context.AfterFunc регистрирует функцию для выполнения в отдельной горутине после того, как контекст будет отменен. В первый параметр передается контекст, за которым нужно наблюдать. Во второй параметр передается функция типа func(), которая будет вызвана после отмены контекста. Функция возвращает func() bool - функцию остановки, которая при вызове отменяет регистрацию и возвращает true, если она успела отменить регистрацию до вызова переданной функции.

Синтаксис

stop := context.AfterFunc(ctx, func() { // код, выполняемый после отмены контекста })

Пример

Давайте создадим контекст и зарегистрируем функцию, которая будет вызвана после его отмены:

package main import ( "context" "fmt" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() stop := context.AfterFunc(ctx, func() { fmt.Println("context canceled") }) defer stop() time.Sleep(3 * time.Second) }

Результат выполнения кода:

"context canceled"

Пример

Давайте зарегистрируем функцию и отменим ее регистрацию до того, как контекст будет отменен:

package main import ( "context" "fmt" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() stop := context.AfterFunc(ctx, func() { fmt.Println("this will not be printed") }) if stop() { fmt.Println("stop succeeded") } time.Sleep(6 * time.Second) }

Результат выполнения кода:

"stop succeeded"

Пример

Давайте покажем, что функция вызывается только один раз, даже если контекст отменяется несколько раз:

package main import ( "context" "fmt" ) func main() { ctx, cancel := context.WithCancel(context.Background()) context.AfterFunc(ctx, func() { fmt.Println("callback executed only once") }) cancel() cancel() cancel() }

Результат выполнения кода:

"callback executed only once"

Смотрите также

  • функцию context.WithCancel,
    которая создает контекст с функцией отмены
  • функцию context.WithTimeout,
    которая создает контекст с таймаутом
  • функцию context.WithDeadline,
    которая создает контекст с дедлайном
  • функцию context.Context.Done,
    которая возвращает канал для отслеживания отмены контекста
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить