Функция time.AfterFunc

Функция time.AfterFunc планирует выполнение переданной функции через заданный промежуток времени. Она возвращает указатель на time.Timer, который можно использовать для отмены запланированной задачи до ее выполнения. Первым параметром функция принимает интервал времени типа time.Duration, вторым - функцию без параметров, которая будет вызвана по истечении этого интервала.

Синтаксис

gotimer := time.AfterFunc(duration, callback)

Пример

Давайте запланируем вывод сообщения через 2 секунды:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.AfterFunc(2*time.Second, func() {
    fmt.Println("Прошло 2 секунды")
  })

  <-time.After(3 * time.Second)
  timer.Stop()
}

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

go"Прошло 2 секунды"

Пример

Давайте отменим запланированную задачу до ее выполнения:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.AfterFunc(1*time.Second, func() {
    fmt.Println("Задача выполнена")
  })

  // Отменяем задачу через 500 миллисекунд
  time.Sleep(500 * time.Millisecond)
  stopped := timer.Stop()

  if stopped {
    fmt.Println("Задача отменена")
  }

  <-time.After(2 * time.Second)
}

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

go"Задача отменена"

Пример

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

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.AfterFunc(3*time.Second, func() {
    fmt.Println("Выполнено через 3 секунды")
  })

  // Ждем завершения
  <-time.After(4 * time.Second)
  timer.Stop()
}

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

go"Выполнено через 3 секунды"

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

  • функцию time.After,
    которая возвращает канал, по которому приходит значение после задержки
  • функцию time.NewTimer,
    которая создает новый таймер для отложенного выполнения
  • функцию time.Sleep,
    которая приостанавливает выполнение горутины на указанное время
  • функцию time.Timer.Stop,
    которая останавливает таймер и предотвращает выполнение запланированной функции