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.