Junior — Middle
Goroutine'ning to'xtatilishi yoki o'z-o'zidan to'xtashi mumkinmi?
sobes.tech AI
AIdan javob
Go'da, goroutine bajarilishini bir nechta holatlar o'z-o'zidan to'xtatishi mumkin:
- Goroutine o'z funksiyasini yakunladi. Goroutine ichida ishga tushirilgan funksiya tugagach, goroutine yakunlanadi.
- Goroutine ichida panika. Agar goroutine ichida panika yuzaga kelsa va u boshqarilmasa, u avto tarzda tugaydi.
- Kontekst (context) orqali bekor qilish. Agar goroutine
context.Contextorqali bekor qilish signalini eshitib, oladigan bo'lsa, u to'g'ri yakunlanishi mumkin.
Muhim bo'lib, goroutine'lar tashqaridan majburan uzilmaydi — to'xtatish mexanizmini o'zingiz amalga oshirishingiz kerak, masalan, kanallar yoki kontekstlar orqali.
Kontekst yordamida goroutine'ni bekor qilish misoli:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine yakunlandi")
return
default:
// ish
}
}
}(ctx)
// Biron vaqt, cancel() chaqiramiz
cancel()
Shu tarzda, goroutine yoki o'z ishini tugatgach, yoki bekor qilish signali olgach, to'xtaydi, agar bu nazarda tutilgan bo'lsa.