Sobes.tech
Junior — Middle

Hoe stop je de uitvoering van een goroutine als de verwachte waarde nog niet is bereikt?

sobes.tech AI

Antwoord van AI

In Go, om een goroutine te stoppen die wacht op een waarde, maar die waarde mogelijk niet zal komen, worden meestal kanalen met timeout of een context met annulering gebruikt.

Voorbeeld met timeout via select en time.After:

select {
case val := <-ch:
    // waarde ontvangen, ga door met werken
case <-time.After(time.Second * 5):
    // timeout, stop de goroutine
}

Een andere manier is het gebruik van een context (context.Context), die van buitenaf kan worden geannuleerd:

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

go func() {
    select {
    case val := <-ch:
        // verwerk val
    case <-ctx.Done():
        // stop de goroutine
    }
}()

// ergens in de code, roep cancel() aan om de goroutine te stoppen

Op deze manier blijft de goroutine niet eindeloos wachten en kan deze correct worden beëindigd.