Sobes.tech
Middle

Ինչպիսի՞ն են launch և async տարբերությունները սխալների կառավարման համատեքստում։

sobes.tech AI

Պատասխան AI-ից

launch-ի մեջ սխալները ուղղակիորեն տարածվում են ծնողական coroutine կոնտեքստի վրա, ինչը հանգեցնում է ծրագրի անկումի, եթե դրանք չմշակվեն։ async-ում սխալները հետաձգվում են և առաջանում միայն .await() կանչելու ժամանակ։

Օրինակ՝

fun main() = runBlocking {
    // launch: սխալը հանգեցնում է scope-ի անկմանը
    val job = launch {
        throw IllegalStateException("Սխալ `launch`-ում")
    }
    job.join() // Կ սպասի աշխատանքի ավարտին, սխալի դեպքում աշխատանքը կչեղարկվի

    // async: սխալը հետաձգվում է մինչև await
    val deferred = async {
        throw IllegalStateException("Սխալ `async`-ում")
        "Արդյունք" // Այս կոդը չի կատարվի
    }
    try {
        deferred.await() // Այստեղ կբռնվի հետաձգված սխալը
    } catch (e: IllegalStateException) {
        println("Սխալը բռնվեց՝ ${e.message}")
    }
}