Sobes.tech
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.