Sobes.tech
Middle — Middle+

Ako zabezpečiť oddelenie chýb medzi deťmi korutínami a ich rodičovskou korutínou?

sobes.tech AI

Odpoveď od AI

V Kotlin Coroutines sa na oddelenie chýb medzi deťmi korutín a ich rodičovskou korutínou sa používa koncept hierarchie korutín a spracovanie výnimiek prostredníctvom CoroutineExceptionHandler a SupervisorJob.

Podľa predvoleného nastavenia, ak jedna z detských korutín vyhodí výnimku, zruší celú hierarchiu, vrátane rodičovskej korutíny a ostatných detí.

Na oddelenie chýb a zabránenie zrušenia rodiča pri chybách detí sa používa SupervisorJob alebo supervisorScope. V tomto prípade chyby detských korutín nezrušia rodiča ani ostatné deti.

Príklad:

val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)

scope.launch {
    val child1 = launch {
        // Táto korutina môže zlyhať
        throw RuntimeException("Chyba v child1")
    }
    val child2 = launch {
        // Táto korutina bude pokračovať
        delay(1000)
        println("child2 úspešne ukončená")
    }
}

Tu, chyba v child1 nezpôsobí zrušenie child2 alebo rodičovskej korutiny.

Na spracovanie chýb sa dá použiť CoroutineExceptionHandler alebo try-catch vo vnútri korutín.

Týmto spôsobom sa dosahuje oddelenie chýb pomocou SupervisorJob a správneho riadenia výnimiek v korutinách.