Junior — Middle
Kā apturēt goroutine izpildi, ja gaidāmajai vērtībai vēl nav sasniegts?
sobes.tech AI
Atbilde no AI
Go valodā, lai apturētu gorutīnu, kas gaida vērtību, bet šī vērtība var nenotikt, parasti izmanto kanālus ar laika ierobežojumu vai kontekstu ar atcelšanu.
Piemērs ar laika ierobežojumu, izmantojot select un time.After:
select {
case val := <-ch:
// saņemta vērtība, turpinām darbu
case <-time.After(time.Second * 5):
// laika ierobežojums beidzies, apturēt gorutīnu
}
Vēl viens veids ir izmantot kontekstu (context.Context), kuru var atcelt no ārpuses:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// apstrādāt val
case <-ctx.Done():
// apturēt gorutīnu
}
}()
// kaut kur kodā izsauciet cancel(), lai apturētu gorutīnu
Tādējādi gorutīna nesēdēs bezgalīgi gaidījumā un varēs pareizi pabeigt darbu.