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}")
}
}