Junior — Middle
Jaký je rozdíl mezi použitím funkce WithTimeout a WithDeadline v kontextu kontroly doby běhu?
sobes.tech AI
Odpověď od AI
Funkce WithTimeout a WithDeadline v Go se používají k vytvoření kontextu s časovým omezením, ale liší se způsobem, jakým je toto omezení nastaveno:
-
WithTimeout(parent, timeout)vytvoří kontext, který se automaticky zruší po uplynutí dobytimeoutod aktuálního okamžiku. To znamená, že časovač se spustí při volání. -
WithDeadline(parent, deadline)vytvoří kontext, který se zruší v konkrétním časedeadline(typutime.Time). To umožňuje přesně určit čas, kdy kontext vyprší.
Příklad:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 se zruší za 5 sekund od teď
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 se zruší přesně v okamžiku deadline
Proto je WithTimeout užitečné, když je třeba nastavit délku trvání, a WithDeadline, když je důležitý konkrétní čas.