Junior — Middle
Como é que o tratamento de erros é realizado no âmbito do CoroutineScope em Kotlin?
sobes.tech IA
Resposta da IA
O tratamento de erros em CoroutineScope em Kotlin é realizado através de mecanismos de exceções e manipuladores de erros especiais.
Principais métodos:
- try-catch dentro da coroutine Pode envolver o código da coroutine num bloco try-catch para tratamento local de exceções.
launch {
try {
// código que pode lançar uma exceção
} catch (e: Exception) {
// tratamento do erro
}
}
- CoroutineExceptionHandler É um manipulador especial que pode ser passado ao contexto da coroutine para tratamento global de exceções não capturadas em coroutines lançadas com launch (mas não com async).
val handler = CoroutineExceptionHandler { _, exception ->
println("Capturado $exception")
}
val scope = CoroutineScope(Dispatchers.Main + handler)
scope.launch {
throw RuntimeException("Erro")
}
- Tratamento de erros em async No caso de async, as exceções não são lançadas imediatamente, mas quando se chama await(), portanto o tratamento de erros deve ocorrer lá.
val deferred = async {
throw RuntimeException("Erro")
}
try {
deferred.await()
} catch (e: Exception) {
// tratamento
}
Assim, a escolha do método depende do tipo de coroutine e do nível de tratamento de erros desejado.