Middle
Was sind die Unterschiede zwischen launch und async im Kontext der Fehlerbehandlung?
sobes.tech KI
Antwort von AI
В 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}")
}
}