Junior — Middle
Jak obsługiwana jest obsługa błędów w ramach CoroutineScope w Kotlin?
sobes.tech AI
Odpowiedź od AI
Obsługa błędów w CoroutineScope w Kotlinie odbywa się za pomocą mechanizmów wyjątków i specjalnych obsługiwaczy błędów.
Główne metody:
- try-catch wewnątrz korutyny Kod korutyny można opakować w blok try-catch, aby obsługiwać wyjątki lokalnie.
launch {
try {
// kod, który może wyrzucić wyjątek
} catch (e: Exception) {
// obsługa błędu
}
}
- CoroutineExceptionHandler To specjalny obsługiwacz, który można przekazać do kontekstu korutyny, aby globalnie obsługiwać nieobsłużone wyjątki w korutynach uruchomionych przez launch (ale nie przez async).
val handler = CoroutineExceptionHandler { _, exception ->
println("Złapano $exception")
}
val scope = CoroutineScope(Dispatchers.Main + handler)
scope.launch {
throw RuntimeException("Błąd")
}
- Obsługa błędów w async W przypadku async, wyjątki nie są rzucane od razu, lecz podczas wywołania await(), więc obsługa błędów powinna się tam odbywać.
val deferred = async {
throw RuntimeException("Błąd")
}
try {
deferred.await()
} catch (e: Exception) {
// obsługa
}
W związku z tym wybór metody zależy od typu korutyny i pożądanego poziomu obsługi błędów.