Sobes.tech
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í doby timeout od aktuálneho okamihu. To znamená, že časovač sa spustí pri volaní.

  • WithDeadline(parent, deadline) vytvorí kontext, ktorý sa zruší v konkrétnom čase deadline (typu time.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.