Sobes.tech
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 timp timeout de la momentul curent. Adică, temporizatorul pornește din momentul apelului.

  • WithDeadline(parent, deadline) creează un context care este anulat la un moment specific deadline (tip time.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.