Sobes.tech
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.