Sobes.tech
Middle

Scope qanday qilib korutinaning bekor qilinishini kuzatadi?

sobes.tech AI

AIdan javob

Scope Job ob'ekt yordamida korutinaning bekor qilinishini kuzatadi. Har bir CoroutineScope bilan bog'langan Job mavjud.

Yangi korutina CoroutineScope ichida yaratilganda, u bu scope ning Jobini ota Job sifatida oladi.

Bekor qilishni kuzatish mexanizmi quyidagicha ishlaydi:

  1. Scope Bekor qilinishi: Job ga cancel() chaqirilganda, u rekursiv ravishda barcha bolalar Joblarini bekor qiladi.
  2. Bolalar Korutinasining Bekor qilinishi: Bolalar korutinasini (masalan, withContext(NonCancellable) orqali) bekor qilish yoki nazorat qilinmagan istisno yuzaga kelganda, u o'z ota Jobiga xabar beradi. Ota Job (scope) o'z navbatida boshqa bolalar korutinalarini bekor qilishi mumkin.
  3. Kooperativ Bekor qilish: Korutinalar kooperativ bo'lishi kerak. Bu shuni anglatadiki, korutina ichida kod muntazam ravishda bekor qilinmaganligini tekshirishi va shunday qilib, o'z ishini to'g'ri yakunlashi kerak. Suspend funksiyalar (masalan, delay, I/O operatsiyalari) avtomatik ravishda Job holatini tekshiradi.

Kod isActive yoki ensureActive() yordamida bekor qilishni aniq tekshirishi mumkin:

// Korutinaning faoliyatini tekshirish misoli
suspend fun fetchData() = coroutineScope {
    launch {
        while (isActive) {
            // Uzun davom etadigan operatsiya bajarish
            delay(100) // suspend nuqtasi - avtomatik ravishda bekor qilishni tekshiradi

            // Yoki aniq tekshirish
            if (!isActive) {
                break // bekor qilinishda sikldan chiqish
            }
        }
        println("fetchData korutinasining yakunlanishi")
    }
}

ensureActive() bekor qilinishida CancellationExceptionni tashlaydi:

// ensureActive() dan foydalanish
suspend fun processData() {
    // ... biror ish ...
    ensureActive() // Korutina bekor qilinsa, CancellationException tashlaydi
    // ... faolligini tekshirish bilan davom etish ...
}

CancellationException bekor qilish signalini tarqatish uchun standart usuldir. Bu korutinalarning bekor qilinishida xato sifatida qabul qilinmasligi kerak.

Scope, Job bilan, "ota-ota" (parent-child) Job hierarxiyasini yaratadi, bu esa ota Jobdan bolalar Joblariga bekor qilish signalini tarqatishga imkon beradi. Bu, korutinalarda strukturaviy parallelizm uchun asosiy tamoyildir.