„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann das „Kontext“-Paket von Go zum Timeout von Goroutinen verwendet werden?

Wie kann das „Kontext“-Paket von Go zum Timeout von Goroutinen verwendet werden?

Veröffentlicht am 12.01.2025
Durchsuche:125

How Can Go\'s `context` Package Be Used to Timeout Goroutines?

Wie geht Go mit Zeitüberschreitungen bei Goroutinen um?

Frage:

Sie erstellen ein Tool, das mehrere HTTP-Aufrufe verarbeitet in gleichzeitigen Goroutinen. Um ein unbestimmtes Ausführungsszenario zu verhindern, suchen Sie nach einer Möglichkeit, die Goroutinen nach einer bestimmten Zeitspanne abzubrechen.

Lösung:

Während der Ansatz, eine Goroutine in den Ruhezustand zu versetzen für eine bestimmte Dauer und das Senden einer Broadcast-Nachricht zum Abbrechen der anderen Goroutinen erscheint logisch, es scheint hierbei ein Problem mit der Ausführung von Goroutinen zu geben Szenario.

Um dieser Herausforderung zu begegnen, sollten Sie die Nutzung des Kontextpakets in Go in Betracht ziehen. Es bietet eine effektive Möglichkeit, Zeitüberschreitungen und Kontextabbrüche für Goroutinen zu handhaben.

Code-Snippet:

Hier ist ein Beispiel für die Verwendung des Kontextpakets für die Zeitüberschreitungsverwaltung von Goroutinen:

package main

import (
    "context"
    "fmt"
    "time"
)

func test(ctx context.Context) {
    t := time.Now()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
        fmt.Println("cancelled")
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go test(ctx)

    // cancel context after 30 milliseconds
    time.Sleep(30 * time.Millisecond)
    cancel()
}

Dieser Code erstellt einen Kontext mit einem Timeout von 50 Millisekunden. Anschließend wird eine Goroutine gestartet, um die Testfunktion auszuführen und dabei den Kontext zu übergeben. Innerhalb der Testfunktion wartet eine Select-Anweisung darauf, dass entweder die Zeitüberschreitung eintritt oder der Kontext abgebrochen wird. Nach 30 Millisekunden wird der Kontext abgebrochen, wodurch die Goroutine beendet wird und „abgebrochen“ ausgibt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3