Sobes.tech
Junior — Middle

Kotlin'dagi korutinlarda xatoliklarni qanday boshqarish usullari va yondashuvlari mavjud?

sobes.tech AI

AIdan javob

Kotlin'da, korutinlarda xatolarni boshqarish uchun bir nechta yondashuvlar mavjud:

  1. try-catch ichida korutin — eng oddiy xatolarni boshqarish usuli. Siz launch yoki async ichida kodni try-catch blokiga olishingiz mumkin.
launch {
    try {
        // xatolik keltirib chiqarishi mumkin bo'lgan kod
    } catch (e: Exception) {
        // xatoni boshqarish
    }
}
  1. CoroutineExceptionHandler — maxsus boshqaruvchi bo'lib, uni korutina kontekstiga o'tkazish mumkin. U launch orqali boshlagan korutinadagi boshqarilmagan xatolarni ushlaydi.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Yopilgan $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Xato")
}
  1. async/await bilan xatolarni boshqarishasync ishlatilganda, xatolar darhol tashlanmaydi, balki await() chaqirilganda tashlanadi. Shuning uchun, await() ni try-catch bilan o'rash kerak.
val deferred = async {
    // kod
    throw Exception("Xato")
}

try {
    deferred.await()
} catch (e: Exception) {
    // boshqarish
}
  1. SupervisorJob va SupervisorScope — bolalar korutinalaridagi xatolarni izolyatsiya qilish imkonini beradi, shunda bir xato butun ota-ona scope'ini bekor qilmaydi.

Shuning uchun, usul tanlovi kontekst va korutina turiga (launch yoki async) bog'liq.