Sobes.tech
Junior — Middle

Ako implementovať funkčnosť podobnú SupervisorJob bez jej zavedenia?

sobes.tech AI

Odpoveď od AI

SupervisorJob v Kotlin Coroutines umožňuje, aby podriadené korutiny fungovali nezávisle: chyba v jednej ne zruší ostatné. Aby ste implementovali podobné správanie bez SupervisorJob, môžete ručne spravovať životný cyklus korútin a spracovávať výnimky tak, aby ne spôsobovali zrušenie rodičovskej korutiny.

Príklad:

val parentJob = Job()

fun launchIndependentCoroutine(scope: CoroutineScope, block: suspend () -> Unit) {
    scope.launch(parentJob) {
        try {
            block()
        } catch (e: Throwable) {
            // Spracovanie chyby, aby nezrušilo parentJob
            println("Chyba v detskej korutine: ${e.message}")
        }
    }
}

// Použitie
launchIndependentCoroutine(CoroutineScope(Dispatchers.Default)) {
    // kód korutiny
}

Týmto spôsobom chyby v detských korutinách nebudú rušiť rodičovský Job, čo imituje správanie SupervisorJob.