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