Sobes.tech
Junior — Middle

Quais abordagens e métodos são utilizados para lidar com erros em corrotinas Kotlin?

sobes.tech IA

Resposta da IA

Em Kotlin, existem várias abordagens para lidar com erros em corrotinas:

  1. try-catch dentro da corrotina — a forma mais simples de lidar com exceções. Pode envolver o código dentro de launch ou async num bloco try-catch.
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 no contexto da corrotina. Ele captura exceções não tratadas em corrotinas lançadas via launch.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Capturado $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Erro")
}
  1. Tratamento de erros em async/await — ao usar async, as exceções não são lançadas imediatamente, mas quando se chama await(). Portanto, deve-se envolver await() em um try-catch.
val deferred = async {
    // código
    throw Exception("Erro")
}

try {
    deferred.await()
} catch (e: Exception) {
    // tratamento
}
  1. SupervisorJob e SupervisorScope — permitem isolar erros de corrotinas filhas, de modo que um erro não cancele todo o escopo pai.

Assim, a escolha do método depende do contexto e do tipo de corrotina (launch ou async).