Sobes.tech
Middle

Jaké jsou rozdíly mezi launch a async v kontextu zpracování chyb?

sobes.tech AI

Odpověď od AI

V launch se chyby přímo šíří na rodičovský coroutine kontext, což způsobí pád aplikace, pokud nejsou ošetřeny. V async jsou chyby odloženy a vznikají pouze při volání .await().

Například:

fun main() = runBlocking {
    // launch: chyba způsobí pád scope
    val job = launch {
        throw IllegalStateException("Chyba v launch")
    }
    job.join() // Čeká na dokončení job, v případě chyby bude job zrušen

    // async: chyba je odložena do await
    val deferred = async {
        throw IllegalStateException("Chyba v async")
        "Výsledek" // Tento kód se nespustí
    }
    try {
        deferred.await() // Zde bude vyhozena odložená chyba
    } catch (e: IllegalStateException) {
        println("Chyba zachycena: ${e.message}")
    }
}