Junior — Middle
Como implementar uma funcionalidade semelhante ao SupervisorJob sem integrá-la?
sobes.tech IA
Resposta da IA
O SupervisorJob no Kotlin Coroutines permite que as corrotinas filhas funcionem de forma independente: um erro numa delas não cancela as outras. Para implementar um comportamento semelhante sem SupervisorJob, pode-se gerir manualmente o ciclo de vida das corrotinas e tratar as exceções de modo que elas não levem ao cancelamento da corrotina pai.
Exemplo:
val parentJob = Job()
fun launchIndependentCoroutine(scope: CoroutineScope, block: suspend () -> Unit) {
scope.launch(parentJob) {
try {
block()
} catch (e: Throwable) {
// Tratamento do erro para não cancelar o parentJob
println("Erro na corrotina filha: ${e.message}")
}
}
}
// Uso
launchIndependentCoroutine(CoroutineScope(Dispatchers.Default)) {
// código da corrotina
}
Desta forma, erros nas corrotinas filhas não irão cancelar o Job pai, o que imita o comportamento do SupervisorJob.