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