Sobes.tech
Junior — Middle

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 Zeitspanne timeout ab dem aktuellen Zeitpunkt abgebrochen wird. Das heißt, der Timer startet beim Aufruf.

  • WithDeadline(parent, deadline) erstellt einen Kontext, der zu einem bestimmten Zeitpunkt deadline (vom Typ time.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.