Junior — Middle
Go tilida kontekst yordamida goroutine'larning bajarilishini qanday to'g'ri to'xtatish mumkin?
sobes.tech AI
AIdan javob
Go tilida goroutine'larni to'g'ri to'xtatish uchun ko'pincha context paketidan foydalaniladi. Bekor qilish imkoniyatiga ega bo'lgan kontekst (context.WithCancel) yaratiladi va goroutine'ga yuboriladi. Goroutine ichida, kontekst holati <-ctx.Done() orqali muntazam tekshiriladi. Bekor qilish funksiyasi chaqirilganda, Done() kanali yopiladi va goroutine to'g'ri yakunlanishi mumkin.
Misol:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine to'xtatildi")
return
default:
// ishni bajarish
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// bir oz vaqt o'tgach, goroutine'ni to'xtatamiz
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // goroutine'ning yakunlanishi uchun
}
Bu yondashuv, goroutine'larni xavfsiz va nazoratli tarzda yakunlash imkonini beradi, xavfsiz bo'lmagan usullardan foydalanmasdan.