Sobes.tech
Middle

Mik a különbségek a launch és az async között a hibakezelés kontextusában?

sobes.tech MI

Válasz az MI-től

A launch-ban a hibák közvetlenül a szülő coroutine kontextusára terjednek, ami az alkalmazás összeomlását okozza, ha nem kezelik őket. Az async-ben a hibák késleltetve vannak, és csak akkor fordulnak elő, amikor meghívják a .await()-t.

Példa:

fun main() = runBlocking {
    // launch: hiba a scope összeomlását okozza
    val job = launch {
        throw IllegalStateException("Hiba a launch-ben")
    }
    job.join() // Várja a job befejezését, hiba esetén a job törlésre kerül

    // async: hiba késleltetve az await-ig
    val deferred = async {
        throw IllegalStateException("Hiba az async-ben")
        "Eredmény" // Ez a kód nem fog végrehajtódni
    }
    try {
        deferred.await() // Itt dobódik a késleltetett hiba
    } catch (e: IllegalStateException) {
        println("Hiba elfogva: ${e.message}")
    }
}