Sobes.tech
Junior — Middle

¿Cómo manejar las excepciones al iniciar corutinas usando try/catch, colocado fuera de la función launch?

sobes.tech AI

Respuesta de la IA

En Kotlin, las excepciones que ocurren dentro de las corutinas no se pueden atrapar con un try/catch normal si se coloca fuera de la función launch, porque launch inicia la corutina de forma asíncrona y devuelve inmediatamente un objeto Job, y las excepciones ya ocurren en otro contexto.

Para manejar las excepciones, se deben usar manejadores dentro de la corutina o mecanismos especiales:

  • Usar CoroutineExceptionHandler al crear el contexto de la corutina.
  • Manejar las excepciones dentro de la misma corutina con try/catch.
  • Para las corutinas lanzadas con async, se puede atrapar la excepción al llamar a await().

Ejemplo con CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Excepción atrapada: ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("Error en la corutina")
}

job.join()

De esta forma, un try/catch fuera de launch no funcionará, es necesario atraparla dentro de la corutina o usar CoroutineExceptionHandler.