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 potimeouttrukmės nuo dabartinio momento. Kitaip tariant, laikmatis pradedamas iškart po kvietimo. -
WithDeadline(parent, deadline)sukuria kontekstą, kuris atšaukiamas tiksliai nustatytu laikudeadline(tipotime.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.