Como garantir a separação de erros entre as coroutines filhas e a sua coroutine pai?
sobes.tech IA
Resposta da IA
No Kotlin Coroutines, para separar os erros entre as coroutines filhas e a coroutine pai, utiliza-se o conceito de hierarquia de coroutines e o tratamento de exceções através de CoroutineExceptionHandler e SupervisorJob.
Por padrão, se uma das coroutines filhas lança uma exceção, ela cancela toda a hierarquia, incluindo a coroutine pai e outras filhas.
Para separar os erros e evitar a cancelamento do pai em caso de erros nas filhas, usa-se SupervisorJob ou supervisorScope. Nesse caso, os erros das coroutines filhas não cancelam o pai nem outras filhas.
Exemplo:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
val child1 = launch {
// Esta coroutine pode falhar
throw RuntimeException("Erro em child1")
}
val child2 = launch {
// Esta coroutine continuará a executar
delay(1000)
println("child2 terminou com sucesso")
}
}
Aqui, o erro em child1 não causará o cancelamento de child2 nem da coroutine pai.
Para tratar erros, pode-se usar CoroutineExceptionHandler ou try-catch dentro das coroutines.
Dessa forma, a separação de erros é alcançada com SupervisorJob e uma gestão adequada de exceções nas coroutines.