Назад к вопросам
Middle
121
questionbank
Каковы отличия между launch и async в контексте обработки ошибок?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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}")
}
}