Junior — Middle
Mi a különbség a WithTimeout és a WithDeadline funkciók használata között az időtartam ellenőrzésének kontextusában?
sobes.tech MI
Válasz az MI-től
A WithTimeout és WithDeadline funkciók Go-ban időkorlátos kontextus létrehozására szolgálnak, de különböznek abban, hogy hogyan állítják be ezt a korlátot:
-
WithTimeout(parent, timeout)egy olyan kontextust hoz létre, amely automatikusan megszűnik atimeoutidő elteltével a jelenlegi pillanattól kezdve. Vagyis, az időzítő a hívás pillanatában indul. -
WithDeadline(parent, deadline)egy olyan kontextust hoz létre, amely egy adott időpontban, adeadline(típustime.Time) megszűnik. Ez lehetővé teszi, hogy pontosan meghatározzuk, mikor jár le a kontextus.
Példa:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// a ctx1 5 másodpercen belül megszűnik
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// a ctx2 pontosan a deadline időpontjában szűnik meg
Ezért a WithTimeout akkor hasznos, ha egy időtartamot akarunk beállítani, míg a WithDeadline akkor, ha egy konkrét időpont a fontos.