Middle
Koje su razlike između launch i async u kontekstu obrade grešaka?
sobes.tech АИ
Одговор од АИ
У launch грешке се директно шире на родитељски контекст корутине, што доводи до пада апликације ако нису обрађене. У async, грешке се одлажу и јављају се само при позиву .await().
На пример:
fun main() = runBlocking {
// launch: грешка доводи до пада scope-а
val job = launch {
throw IllegalStateException("Грешка у launch")
}
job.join() // Чека на завршетак job-а, у случају грешке, job ће бити отказан
// async: грешка се одлаже до await
val deferred = async {
throw IllegalStateException("Грешка у async")
"Резултат" // Овај код се неће извршити
}
try {
deferred.await() // Овде ће бити подигнута одложена грешка
} catch (e: IllegalStateException) {
println("Обрађена грешка: ${e.message}")
}
}