Sobes.tech
Назад к вопросам
Senior
7

Можете привести примеры использования WithCancel, WithTimeout и WithDeadline?

Компании, где спрашивали
Алабуга

Ответ от нейросети

sobes.tech AI

В Go пакете context есть функции для создания контекстов с возможностью отмены и ограничения времени выполнения:

  • WithCancel — создаёт контекст, который можно отменить вручную, вызывая функцию cancel(). Используется, когда нужно прервать операцию по событию.

  • WithTimeout — создаёт контекст, который автоматически отменяется через заданный промежуток времени.

  • WithDeadline — создаёт контекст, который отменяется в определённый момент времени.

Примеры:

ctx, cancel := context.WithCancel(context.Background())
// Запускаем горутину, которая отменит контекст через 2 секунды
go func() {
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-ctx.Done():
    fmt.Println("Операция отменена")
}

// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// операция, которая прервётся через 3 секунды

// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// операция, которая прервётся в заданное время

Эти механизмы полезны для контроля времени выполнения запросов, отмены долгих операций и управления ресурсами.