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:
- Scope Bekor qilinishi:
Jobgacancel()chaqirilganda, u rekursiv ravishda barcha bolalarJoblarini bekor qiladi. - Bolalar Korutinasining Bekor qilinishi: Bolalar korutinasini (masalan,
withContext(NonCancellable)orqali) bekor qilish yoki nazorat qilinmagan istisno yuzaga kelganda, u o'z otaJobiga xabar beradi. OtaJob(scope) o'z navbatida boshqa bolalar korutinalarini bekor qilishi mumkin. - 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 ravishdaJobholatini 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.