Was ist der Unterschied zwischen der Verwendung von WithTimeout und WithDeadline im Kontext der Steuerung der Ausführungszeit?
sobes.tech KI
Antwort von AI
Die Funktionen WithTimeout und WithDeadline in Go werden verwendet, um einen Kontext mit Zeitbegrenzung zu erstellen, unterscheiden sich jedoch in der Art und Weise, wie diese Begrenzung festgelegt wird:
-
WithTimeout(parent, timeout)erstellt einen Kontext, der automatisch nach einer Zeitspannetimeoutab dem aktuellen Zeitpunkt abgebrochen wird. Das heißt, der Timer startet beim Aufruf. -
WithDeadline(parent, deadline)erstellt einen Kontext, der zu einem bestimmten Zeitpunktdeadline(vom Typtime.Time) abgebrochen wird. Dies ermöglicht die genaue Festlegung, wann der Kontext abläuft.
Beispiel:
ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 wird in 5 Sekunden ab jetzt abgebrochen
deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 wird genau zum Zeitpunkt von deadline abgebrochen
Daher ist WithTimeout praktisch, wenn eine Dauer festgelegt werden soll, und WithDeadline, wenn ein bestimmter Zeitpunkt im Vordergrund steht.