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