Sobes.tech
Junior — Middle

Kuo skiriasi WithTimeout ir WithDeadline funkcijų naudojimas vykdymo laiko kontrolės kontekste?

sobes.tech AI

Atsakymas iš AI

Go kalboje WithTimeout ir WithDeadline funkcijos naudojamos konteksto su laiko apribojimu kūrimui, tačiau skiriasi nustatymo būdu:

  • WithTimeout(parent, timeout) sukuria kontekstą, kuris automatiškai atšaukiamas po timeout trukmės nuo dabartinio momento. Kitaip tariant, laikmatis pradedamas iškart po kvietimo.

  • WithDeadline(parent, deadline) sukuria kontekstą, kuris atšaukiamas tiksliai nustatytu laiku deadline (tipo time.Time). Tai leidžia tiksliai nustatyti, kada kontekstas pasibaigs.

Pavyzdys:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 bus atšauktas po 5 sekundžių nuo dabar

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 bus atšauktas tiksliai `deadline` metu

Todėl WithTimeout yra patogu, kai reikia nustatyti trukmę, o WithDeadline — kai svarbus tikslus laikas.