Sobes.tech
Junior — Middle

Каква е разликата между използването на функцията WithTimeout и WithDeadline в контекста на контрол на времето за изпълнение?

sobes.tech AI

Отговор от 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 — когато е важен конкретен момент във времето.