Sobes.tech
Middle

Aké sú rozdiely medzi launch a async v kontexte spracovania chýb?

sobes.tech AI

Odpoveď od AI

V launch sa errors šíria priamo na rodičovský kontext coroutine, čo spôsobí pád aplikácie, ak nie sú spracované. V async sú errors odložené a vznikajú iba pri volaní .await().

Napríklad:

fun main() = runBlocking {
    // launch: error spôsobí pád scope
    val job = launch {
        throw IllegalStateException("Error v launch")
    }
    job.join() // Čaká na dokončenie job, v prípade chyby bude job zrušený

    // async: error je odložený do await
    val deferred = async {
        throw IllegalStateException("Error v async")
        "Výsledok" // Tento kód sa nespustí
    }
    try {
        deferred.await() // Tu bude vyvolaná odložená chyba
    } catch (e: IllegalStateException) {
        println("Chyba zachytená: ${e.message}")
    }
}