Middle+
Qanday qilib bekor qilinmaydigan korutina yaratishni amalga oshirasiz?
sobes.tech AI
AIdan javob
Bekor qilinmaydigan korutina amalga oshirish uchun NonCancellable kontekstidan foydalanish mumkin.
import kotlinx.coroutines.*
suspend fun performNonCancellableOperation() {
coroutineScope {
launch {
// Bu korutina bekor qilinishi mumkin
delay(1000)
println("Bu korutina bajarildi")
}
withContext(NonCancellable) {
// Bu korutina bekor qilinmaydi, hatto uning otaqoni bekor qilinsa ham
try {
delay(2000) // Uzun davom etadigan operatsiyaning simulyatsiyasi
println("Bekor qilinmaydigan operatsiya yakunlandi")
} catch (e: CancellationException) {
// Korutina hali ham CancellationException olishi mumkin
// ba'zi hollarda (masalan, ilovani yopishda),
// lekin u ota korutina bekor qilishiga reaktiv ravishda ta'sir qilmaydi.
println("Bekor qilinmaydigan operatsiya bekor qilindi: ${e.message}")
} finally {
// Bu blok hatto bekor qilinsa ham bajariladi
println("Bekor qilinmaydigan operatsiya yakunlandi (finally)")
}
}
}
}
NonCancellable dan foydalanish, korutina bekor qilinganidan so'ng yakuniy operatsiyalarni bajarish uchun, masalan, ma'lumotlarni saqlash yoki resurslarni bo'shatish uchun foydalidir.
Muhim: NonCancellable kontekstdan bekor qilishga chidamsiz qiladi, ammo u virtual mashina yopilganda yoki boshqa ekstremal holatlarda bekor qilinishi mumkin. Shuningdek, withContext(NonCancellable) ichida chaqirilgan va o'zida bekor qilishni tekshiradigan (masalan, delay) suspend funksiyasi CancellationExceptionni chiqarishi mumkin. Shuning uchun, bunday holatlarni boshqarish uchun try-catch-finally ishlatish tavsiya etiladi.