Sobes.tech
Junior — Middle

Comment gérer les exceptions lors du lancement de coroutines avec try/catch, placé en dehors de la fonction launch?

sobes.tech IA

Réponse de l'IA

En Kotlin, les exceptions qui se produisent à l'intérieur des coroutines ne peuvent pas être attrapées avec un try/catch classique si elle est placée en dehors de la fonction launch, car launch démarre la coroutine de manière asynchrone et retourne immédiatement un objet Job, et les exceptions se produisent déjà dans un autre contexte.

Pour gérer les exceptions, il faut utiliser des gestionnaires à l'intérieur de la coroutine ou des mécanismes spécifiques :

  • Utiliser CoroutineExceptionHandler lors de la création du contexte de la coroutine.
  • Gérer les exceptions à l'intérieur de la coroutine avec try/catch.
  • Pour les coroutines lancées via async, il est possible d'attraper l'exception en appelant await().

Exemple avec CoroutineExceptionHandler :

val handler = CoroutineExceptionHandler { _, exception ->
    println("Exception attrapée : ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("Erreur dans la coroutine")
}

job.join()

Ainsi, un try/catch en dehors de launch ne fonctionnera pas, il faut soit le capturer à l'intérieur de la coroutine, soit utiliser CoroutineExceptionHandler.