Sobes.tech
Junior — Middle

Wie kann man die Ausführung einer Goroutine stoppen, wenn der erwartete Wert noch nicht erreicht wurde?

sobes.tech KI

Antwort von AI

In Go, um Goroutine, der auf einen Wert wartet, aber dieser Wert möglicherweise nicht eintrifft, wird üblicherweise mit Kanälen mit Timeout oder einem Abbruchkontext gestoppt.

Beispiel mit Timeout über select und time.After:

select {
case val := <-ch:
    // Wert empfangen, Arbeit fortsetzen
case <-time.After(time.Second * 5):
    // Timeout, Goroutine beenden
}

Eine andere Methode ist die Verwendung eines Kontextes (context.Context), der von außen abgebrochen werden kann:

ctx, cancel := context.WithCancel(context.Background())

go func() {
    select {
    case val := <-ch:
        // val verarbeiten
    case <-ctx.Done():
        // Goroutine stoppen
    }
}()

// Irgendwo im Code cancel() aufrufen, um die Goroutine zu beenden

Auf diese Weise läuft die Goroutine nicht unendlich lang und kann ordnungsgemäß beendet werden.