Junior — Middle
Care este diferența dintre utilizarea funcției WithTimeout și WithDeadline în contextul controlului timpului de execuție?
sobes.tech AI
Răspuns de la AI
Funcțiile WithTimeout și WithDeadline în Go sunt utilizate pentru a crea un context cu limită de timp, dar diferă în modul de stabilire a acestei limite:
-
WithTimeout(parent, timeout)creează un context care este anulat automat după o perioadă de timptimeoutde la momentul curent. Adică, temporizatorul pornește din momentul apelului. -
WithDeadline(parent, deadline)creează un context care este anulat la un moment specificdeadline(tiptime.Time). Acest lucru permite stabilirea unui moment exact în care contextul va expira.
Exemplu:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 va fi anulat în 5 secunde de acum
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 va fi anulat exact la momentul deadline
Prin urmare, WithTimeout este util atunci când trebuie stabilită o durată, iar WithDeadline când este important un moment specific în timp.