Junior — Middle
Como é que a gestão de exceções é feita dentro das coroutines na sua experiência?
sobes.tech IA
Resposta da IA
O tratamento de exceções em corutinas no Android geralmente é feito usando blocos try-catch dentro da própria corutina ou usando mecanismos especiais, como CoroutineExceptionHandler.
Se uma exceção ocorrer dentro de uma corutina, ela pode ser capturada assim:
launch {
try {
// código que pode lançar uma exceção
} catch (e: Exception) {
// tratamento da exceção
}
}
Para o tratamento global de exceções não tratadas, pode-se usar CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Capturado $exception")
}
GlobalScope.launch(handler) {
throw RuntimeException("Erro")
}
É importante lembrar que as exceções em corutinas lançadas via launch são passadas para o manipulador, enquanto nas corutinas lançadas via async, a exceção será lançada ao chamar await().
Portanto, ao usar async, é necessário envolver a chamada de await() em um try-catch para tratar erros.