Junior — Middle
Goroutine-in kəsilməsi və ya öz-özünə dayanması mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Go'da, goroutine'nin öz-özünə sona çatması bir neçə halda mümkündür:
- Goroutine öz funksiyasını tamamladı. Goroutine içində işlədilən funksiya sona çatdıqda, goroutine bağlanır.
- Goroutine daxilində panika. Əgər goroutine daxilində panika baş verərsə və idarə olunmazsa, o qəfil sona çatacaq.
- Kontekst (context) vasitəsilə ləğv. Əgər goroutine
context.Contextvasitəsilə ləğv siqnalını dinləyirsə və alırsa, düzgün şəkildə sona çatdırıla bilər.
Əhəmiyyətli olan, goroutine'lərin xaricdən zorla kəsilməməsidir — dayanma mexanizmini özünüz tətbiq etməlisiniz, məsələn, kanallar və ya kontekstlər vasitəsilə.
Kontekst istifadə edərək goroutine'yi ləğv etmə nümunəsi:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine tamamlandı")
return
default:
// iş
}
}
}(ctx)
// Bir vaxt, cancel() çağırırıq
cancel()
Bu şəkildə, goroutine ya öz işi bitdikdə, ya da ləğv siqnalı alındıqda, planlaşdırıldığı kimi sona çatır.