Sobes.tech
Junior — Middle

Quelles approches et méthodes sont utilisées pour gérer les erreurs dans les coroutines Kotlin?

sobes.tech IA

Réponse de l'IA

En Kotlin, il existe plusieurs approches pour gérer les erreurs dans les coroutines :

  1. try-catch à l'intérieur de la coroutine — la méthode la plus simple pour gérer les exceptions. Vous pouvez envelopper le code dans launch ou async dans un bloc try-catch.
launch {
    try {
        // code pouvant lancer une exception
    } catch (e: Exception) {
        // gestion de l'erreur
    }
}
  1. CoroutineExceptionHandler — un gestionnaire spécial que l'on peut passer dans le contexte de la coroutine. Il attrape les exceptions non gérées dans les coroutines lancées via launch.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Attrapé $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Erreur")
}
  1. Gestion des erreurs dans async/await — lors de l'utilisation de async, les exceptions ne sont pas lancées immédiatement, mais lors de l'appel à await(). Il faut donc envelopper await() dans un try-catch.
val deferred = async {
    // code
    throw Exception("Erreur")
}

try {
    deferred.await()
} catch (e: Exception) {
    // gestion
}
  1. SupervisorJob et SupervisorScope — permettent d'isoler les erreurs des coroutines enfants, afin qu'une erreur ne fasse pas annuler tout le scope parent.

Ainsi, le choix de la méthode dépend du contexte et du type de coroutine (launch ou async).