Junior — Middle
Aký je rozdiel medzi použitím funkcie WithTimeout a WithDeadline v kontexte kontroly času vykonávania?
sobes.tech AI
Odpoveď od AI
Funkcie WithTimeout a WithDeadline v Go sa používajú na vytvorenie kontextu s časovým obmedzením, ale líšia sa spôsobom, akým je toto obmedzenie nastavené:
-
WithTimeout(parent, timeout)vytvorí kontext, ktorý sa automaticky zruší po uplynutí dobytimeoutod aktuálneho okamihu. To znamená, že časovač sa spustí pri volaní. -
WithDeadline(parent, deadline)vytvorí kontext, ktorý sa zruší v konkrétnom časedeadline(typutime.Time). To umožňuje presne určiť čas, kedy kontext vyprší.
Príklad:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 sa zruší za 5 sekúnd od teraz
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 sa zruší presne v momente deadline
Preto je WithTimeout užitočné, keď je potrebné nastaviť dĺžku trvania, a WithDeadline, keď je dôležitý konkrétny čas.