Sobes.tech
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:

  1. 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
    }
}
  1. 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")
}
  1. 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.