Sobes.tech
Junior — Middle

Kako se vrši obrada grešaka unutar CoroutineScope u Kotlinu?

sobes.tech АИ

Одговор од АИ

Obrada grešaka u CoroutineScope u Kotlinu se vrši pomoću mehanizama izuzetaka i specijalnih rukovalaca grešaka.

Glavni načini:

  1. try-catch unutar korutine Kod korutine može biti obmotan u try-catch blok za lokalnu obradu izuzetaka.
launch {
    try {
        // kod koji može izazvati izuzetak
    } catch (e: Exception) {
        // obrada greške
    }
}
  1. CoroutineExceptionHandler Ovo je poseban rukovalac koji se može proslediti u kontekst korutine za globalnu obradu neobrađenih izuzetaka u korutinama pokrenutim putem launch (ali ne i async).
val handler = CoroutineExceptionHandler { _, exception ->
    println("Uhvaćen $exception")
}

val scope = CoroutineScope(Dispatchers.Main + handler)
scope.launch {
    throw RuntimeException("Greška")
}
  1. Obrada grešaka u async U slučaju async, izuzeci se ne bacaju odmah, već pri pozivu await(), tako da je obrada grešaka tamo.
val deferred = async {
    throw RuntimeException("Greška")
}
try {
    deferred.await()
} catch (e: Exception) {
    // obrada
}

Dakle, izbor metode zavisi od tipa korutine i željenog nivoa obrade grešaka.