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
CoroutineExceptionHandleral 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 aawait().
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.