Junior — Middle
Como lidar com exceções ao iniciar corrotinas usando try/catch, colocado fora da função launch?
sobes.tech IA
Resposta da IA
No Kotlin, as exceções que ocorrem dentro de corrotinas não podem ser capturadas com try/catch comum se estiverem colocadas fora da função launch, porque launch inicia a corrotina de forma assíncrona e retorna imediatamente um objeto Job, e as exceções já ocorrem em outro contexto.
Para tratar as exceções, é necessário usar manipuladores dentro da própria corrotina ou mecanismos especiais:
- Usar
CoroutineExceptionHandlerao criar o contexto da corrotina. - Tratar as exceções dentro da própria corrotina com try/catch.
- Para corrotinas iniciadas com
async, é possível capturar a exceção ao chamarawait().
Exemplo com CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Exceção capturada: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Erro na corrotina")
}
job.join()
Dessa forma, try/catch fora de launch não funcionará, é preciso capturá-la dentro da corrotina ou usar CoroutineExceptionHandler.