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

Функция context.WithDeadline

Функция context.WithDeadline создает новый контекст с привязкой к конкретному моменту времени. Она принимает родительский контекст и время, после которого контекст должен быть отменен. Функция возвращает новый контекст и функцию отмены. Если указанное время уже наступило или наступит раньше, чем время отмены родительского контекста, то новый контекст будет отменен в указанное время. В противном случае он будет отменен вместе с родительским контекстом.

Синтаксис

ctx, cancel := context.WithDeadline(parent, deadline)

где parent - родительский контекст, deadline - время, после которого контекст будет отменен.

Пример

Давайте создадим контекст с крайним сроком выполнения и проверим его поведение:

package main import ( "context" "fmt" "time" ) func main() { deadline := time.Now().Add(2 * time.Second) ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel() select { case <-time.After(3 * time.Second): fmt.Println("Operation completed") case <-ctx.Done(): fmt.Println("Context canceled:", ctx.Err()) } }

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

"Context canceled: context deadline exceeded"

Пример

Давайте проверим, как работает контекст с крайним сроком при успешном выполнении операции:

package main import ( "context" "fmt" "time" ) func main() { deadline := time.Now().Add(5 * time.Second) ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel() select { case <-time.After(2 * time.Second): fmt.Println("Operation completed successfully") case <-ctx.Done(): fmt.Println("Context canceled:", ctx.Err()) } }

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

"Operation completed successfully"

Пример

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

package main import ( "context" "fmt" "time" ) func main() { deadline := time.Now().Add(-1 * time.Second) ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel() select { case <-time.After(1 * time.Second): fmt.Println("Operation completed") case <-ctx.Done(): fmt.Println("Context canceled:", ctx.Err()) } }

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

"Context canceled: context deadline exceeded"

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

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