Sobes.tech
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 czasu timeout od 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 momencie deadline (typ time.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.