Junior — Middle
Hogyan valósítható meg egy SupervisorJob-hoz hasonló funkció anélkül, hogy bevezetnénk?
sobes.tech MI
Válasz az MI-től
A Kotlin Coroutines-ben a SupervisorJob lehetővé teszi, hogy az al-korutinok függetlenül működjenek: egy hiba az egyikben nem törli a többit. Hasonló viselkedést SupervisorJob nélkül úgy valósíthatunk meg, hogy manuálisan kezeljük a korutinok életciklusát, és úgy kezeljük a kivételeket, hogy azok ne vezessenek a szülő korutin törléséhez.
Példa:
val parentJob = Job()
fun launchIndependentCoroutine(scope: CoroutineScope, block: suspend () -> Unit) {
scope.launch(parentJob) {
try {
block()
} catch (e: Throwable) {
// Hiba kezelése, hogy ne törölje a parentJob-t
println("Hiba a gyermek korutinban: ${e.message}")
}
}
}
// Használat
launchIndependentCoroutine(CoroutineScope(Dispatchers.Default)) {
// korutin kód
}
Így a gyermek korutinok hibái nem fogják törölni a szülő Job-ot, ami a SupervisorJob viselkedését utánozza.