Junior — Middle
Czym różni się użycie funkcji WithTimeout od WithDeadline w kontekście kontroli czasu wykonania?
sobes.tech AI
Odpowiedź od AI
Funkcje WithTimeout i WithDeadline w Go służą do tworzenia kontekstu z ograniczeniem czasowym, ale różnią się sposobem ustawiania tego ograniczenia:
-
WithTimeout(parent, timeout)tworzy kontekst, który automatycznie zostanie anulowany po upływie czasutimeoutod chwili wywołania. Oznacza to, że timer uruchamia się w momencie wywołania. -
WithDeadline(parent, deadline)tworzy kontekst, który zostanie anulowany w określonym momenciedeadline(typtime.Time). Pozwala to na ustawienie dokładnego czasu wygaśnięcia kontekstu.
Przykład:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 zostanie anulowany za 5 sekund od teraz
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 zostanie anulowany dokładnie w momencie deadline
Dlatego WithTimeout jest przydatne, gdy trzeba ustalić czas trwania, a WithDeadline — gdy ważny jest konkretny moment w czasie.