Junior — Middle
Kutilgan qiymat hali ham erishilmagan bo'lsa, goroutine ishini qanday to'xtatish mumkin?
sobes.tech AI
AIdan javob
Go tilida, kutish uchun kutayotgan, ammo bu qiymat kelmasligi mumkin bo'lgan gorutini to'xtatish uchun odatda timeout bilan kanallar yoki bekor qilish kontekstidan foydalaniladi.
Timeout bilan select va time.After yordamida misol:
select {
case val := <-ch:
// qiymat olindi, ishni davom ettirish
case <-time.After(time.Second * 5):
// timeout, gorutini to'xtatish
}
Boshqa usul - tashqaridan bekor qilinadigan kontekst (context.Context) dan foydalanish:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// val ni qayta ishlash
case <-ctx.Done():
// gorutini to'xtatish
}
}()
// kodning bir joyida cancel() chaqiriladi, shunda gorutini to'xtatiladi
Shu tarzda, gorutina cheksiz kutib turmaydi va to'g'ri yakunlanishi mumkin.