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