Middle
Jakie są różnice między launch a async w kontekście obsługi błędów?
sobes.tech AI
Odpowiedź od AI
W launch błędy rozprzestrzeniają się bezpośrednio na kontekst nadrzędnego coroutine, co powoduje awarię aplikacji, jeśli nie są obsłużone. W async błędy są odłożone i pojawiają się tylko podczas wywołania .await().
Na przykład:
fun main() = runBlocking {
// launch: błąd powoduje awarię scope
val job = launch {
throw IllegalStateException("Błąd w launch")
}
job.join() // Czeka na zakończenie job, w przypadku błędu job zostanie anulowany
// async: błąd jest odłożony do momentu await
val deferred = async {
throw IllegalStateException("Błąd w async")
"Wynik" // Ten kod nie zostanie wykonany
}
try {
deferred.await() // Tu zostanie rzucony odłożony błąd
} catch (e: IllegalStateException) {
println("Przechwycono błąd: ${e.message}")
}
}