Junior — Middle
Kuidas peatada goroutine'i täitmine, kui oodatud väärtus pole veel saavutatud?
sobes.tech AI
Vastus AI-lt
Go keeles, et gorutina, mis ootab väärtust, kuid see väärtus võib mitte kunagi saabuda, kasutatakse tavaliselt ajapiiranguga kanaleid või tühistamise konteksti.
Näide ajapiirangu kasutamisest select ja time.After abil:
select {
case val := <-ch:
// väärtus saadi, jätkame tööd
case <-time.After(time.Second * 5):
// ajapiirang läbi, lõpetame gorutina
}
Teine võimalus on kasutada konteksti (context.Context), mida saab väljastpoolt tühistada:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// töödelda val
case <-ctx.Done():
// gorutina lõpetada
}
}()
// kuskil koodis kutsuge välja cancel(), et lõpetada gorutina
Sel viisil ei jää gorutina lõputult ootama ja saab õigesti lõpetada.