Junior — Middle
Kaip teisingai sustabdyti goroutine vykdymą naudojant kontekstą Go?
sobes.tech AI
Atsakymas iš AI
Norint teisingai sustabdyti goroutines Go kalboje, dažnai naudojamas context paketas. Sukuriamas kontekstas su galimybe atšaukti (context.WithCancel), kuris perduodamas goroutine. Viduje goroutine, konteksto būsena periodiškai tikrinama <-ctx.Done(). Kai iškviečiama atšaukimo funkcija, kanalas Done() uždaromas, ir goroutine gali teisingai užbaigti darbą.
Pavyzdys:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine sustabdyta")
return
default:
// vykdyti darbą
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// po tam tikro laiko sustabdyti goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // kad goroutine turėtų laiko užbaigti
}
Šis požiūris leidžia saugiai ir kontroliuojamai užbaigti goroutine be nesaugios metodų naudojimo.