Sobes.tech
Junior — Middle

Agar ichida launch bo'lsa va istisno yuz bersa, async bajarilishi bekor qilinadimi?

sobes.tech AI

AIdan javob

Kotlin Coroutines-da, agar async blok ich ichida launch yordamida coroutine ishga tushirilsa, launch ichida yuzaga kelgan xato avtomatik tarzda async bajarilishini bekor qilmaydi.

Sababi, async va launch turli xato boshqarish mexanizmlariga ega bo'lgan turli coroutine'lar yaratadi:

  • async Deferred ni qaytaradi va uning ichidagi xatolar await() chaqirilganda yoyiladi.
  • launch natija qaytarmaydigan coroutine'ni ishga tushiradi va uning ichidagi xatolar CoroutineExceptionHandler orqali yoki ota coroutine'ning bekor qilinishiga olib keladi.

Agar launch async ichida uning Job bilan aniq bog'lanmagan holda ishga tushirilsa, launch ichidagi xato async'ni bekor qilmaydi. Bekor qilishni ta'minlash uchun, launchni shuningdek CoroutineScope ichida ishga tushirish yoki SupervisorJob ishlatish yoki xatolarni aniq boshqarish kerak.

Misol:

val deferred = async {
    launch {
        throw Exception("launch'da xato")
    }
    // async bajarilishi davom etadi
}

// launch'dan kelgan xato, `await()` chaqirilmaguncha, deferred'ga ta'sir qilmaydi