Junior — Middle
Jak zaimplementować funkcjonalność podobną do SupervisorJob bez jej wdrażania?
sobes.tech AI
Odpowiedź od AI
SupervisorJob w Kotlin Coroutines pozwala na niezależne działanie potomnych korutyn: błąd w jednej nie powoduje anulowania pozostałych. Aby zaimplementować podobne zachowanie bez SupervisorJob, można samodzielnie zarządzać cyklem życia korutyn i obsługiwać wyjątki tak, aby nie powodowały one anulowania nadrzędnej korutyny.
Przykład:
val parentJob = Job()
fun launchIndependentCoroutine(scope: CoroutineScope, block: suspend () -> Unit) {
scope.launch(parentJob) {
try {
block()
} catch (e: Throwable) {
// Obsługa błędu, aby nie anulować parentJob
println("Błąd w potomnej korutynie: ${e.message}")
}
}
}
// Użycie
launchIndependentCoroutine(CoroutineScope(Dispatchers.Default)) {
// kod korutyny
}
W ten sposób błędy w potomnych korutynach nie będą anulować nadrzędnego Job, co imituje zachowanie SupervisorJob.