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