Middle
Фарқиятҳои байни launch ва async дар контексти идоракунии хатоҳо чӣ гунаанд?
sobes.tech AI
Ҷавоб аз 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}")
}
}