Sobes.tech
Junior — Middle

Hogyan lehet megállítani egy goroutine végrehajtását, ha a várt érték még nem érkezett meg?

sobes.tech MI

Válasz az MI-től

Go nyelven, egy gorutint, amely egy értéket vár, de ez az érték nem feltétlenül érkezik meg, általában időkorlátos csatornákat vagy megszakítási kontextust használnak.

Időkorlát példája select és time.After segítségével:

select {
case val := <-ch:
    // érték megérkezett, folytatjuk a munkát
case <-time.After(time.Second * 5):
    // időtúllépés, a gorutint leállítjuk
}

Másik módszer a külsőleg megszakítható kontextus (context.Context) használata:

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

go func() {
    select {
    case val := <-ch:
        // feldolgozni val
    case <-ctx.Done():
        // gorutint leállítani
    }
}()

// valahol a kódban hívjuk meg a cancel() függvényt, hogy leállítsuk a gorutint

Így a gorutina nem fog végtelenül várakozni, és megfelelően befejeződik.