Kotlin korutinlarida xatoliklarni boshqarish try/catch konstruktsiyasidan foydalanish bilan CoroutineExceptionHandlerdan foydalanish o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Kotlin'da, korutinlardagi xatoliklarni boshqarish ikki usulda amalga oshirilishi mumkin: try/catch yordamida korutin ichida va CoroutineExceptionHandler yordamida.
-
Korutina ichidagi
try/catchkorutin kod blokida yuzaga keladigan istisnolarni lokal tarzda ushlash imkonini beradi. Bu, xatolik yuzaga keladigan joyda uni to'g'ridan-to'g'ri boshqarish uchun qulay. -
CoroutineExceptionHandler— bu xatolik bilan yakunlangan va lokal tarzda ushlanmagan korutinlar uchun global xatolik boshqaruvchisidir. U faqatlaunchbilan boshlatilgan korutinlar bilan ishlaydi (ularJobni qaytaradi),asyncbilan emas (ularDeferredni qaytaradi), chunkiasyncnatijani olish va xatoliklarni boshqarish uchun aniqawaitchaqiruvini talab qiladi.
Misol:
val handler = CoroutineExceptionHandler { _, exception ->
println("CoroutineExceptionHandler'da ushlangan xato: $exception")
}
GlobalScope.launch(handler) {
try {
// Xato chiqarishi mumkin bo'lgan kod
throw RuntimeException("Korutin ichida xato")
} catch (e: Exception) {
println("Lokal tarzda ushlangan: $e")
}
}
Agar xato try/catch bilan ushlansa, CoroutineExceptionHandler ishga tushmaydi. Agar xato lokal tarzda boshqarilmasa, u CoroutineExceptionHandlerga yuboriladi. Shu tarzda, try/catch lokal boshqaruvni ta'minlaydi, CoroutineExceptionHandler esa global bo'lib, boshqarilmagan xatoliklar uchun log yozish yoki boshqa harakatlar uchun xizmat qiladi.