Sobes.tech
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:

  1. 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
    }
}
  1. 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")
}
  1. 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.