Sobes.tech
Junior — Middle

Jak w Twoim doświadczeniu realizowana jest obsługa wyjątków wewnątrz korutyn?

sobes.tech AI

Odpowiedź od AI

Obsługa wyjątków w korutynach na Androidzie zazwyczaj odbywa się za pomocą bloków try-catch wewnątrz samej korutyny lub za pomocą specjalnych mechanizmów, takich jak CoroutineExceptionHandler.

Jeśli w korutynie wystąpi wyjątek, można go złapać w następujący sposób:

launch {
    try {
        // kod, który może wyrzucić wyjątek
    } catch (e: Exception) {
        // obsługa wyjątku
    }
}

Dla globalnego obsługiwania nieobsłużonych wyjątków można użyć CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Złapano $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Błąd")
}

Ważne jest, aby pamiętać, że wyjątki w korutynach uruchomionych przez launch są przekazywane do obsługi, natomiast w korutynach uruchomionych przez async, wyjątek zostanie rzucony podczas wywołania await().

Dlatego przy użyciu async należy opakować wywołanie await() w try-catch, aby obsłużyć błędy.