Heim  >  Artikel  >  Backend-Entwicklung  >  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?

Susan Sarandon
Susan SarandonOriginal
2024-11-20 04:36:02764Durchsuche

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 diese Herausforderung anzugehen, 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.

Das obige ist der detaillierte Inhalt vonWie kann das „Kontext'-Paket von Go zum Timeout von Goroutinen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn