Sobes.tech
Назад к вопросам
Junior — Middle
107

Чем отличается использование функции WithTimeout от WithDeadline в контексте контроля времени выполнения?

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

sobes.tech AI

Функции WithTimeout и WithDeadline в Go используются для создания контекста с ограничением по времени, но отличаются способом задания этого ограничения:

  • WithTimeout(parent, timeout) создает контекст, который автоматически отменяется через заданный промежуток времени timeout от текущего момента. То есть таймер запускается с момента вызова.

  • WithDeadline(parent, deadline) создает контекст, который отменяется в конкретный момент времени deadline (типа time.Time). Это позволяет задать точное время, когда контекст истечет.

Пример:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 отменится через 5 секунд от сейчас

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 отменится ровно в момент deadline

Таким образом, WithTimeout удобен, когда нужно задать длительность, а WithDeadline — когда важен конкретный момент времени.