Junior — Middle
Kako pravilno zaustaviti pokrenutu gorutinu, ako je potrebno da se završava u zavisnosti od spoljnog signala ili uslova, čak i ako rezultat još nije dobijen?
sobes.tech АИ
Одговор од АИ
Za pravilno zaustavljanje pokrenute gorutine na osnovu spoljnog signala ili uslova u Go obično se koriste kontekst (context.Context) ili kanali za prenos signala otkazivanja.
Primer sa korišćenjem konteksta:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Primljen signal otkazivanja, završavamo gorutinu
return
default:
// Obavljamo posao
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// U nekom trenutku pozivamo cancel() da bismo zaustavili gorutinu
cancel()
}
Ovaj pristup omogućava gorutini da redovno proverava da li je poslat signal za zaustavljanje i da se pravilno završi, čak i ako rezultat još nije dobijen. Slično, može se koristiti kanal za prenos signala za zaustavljanje, ali context je idiomatski i zgodan način u Go.