Sobes.tech
Middle

Ката кетирүүнү башкаруу контекстинде launch жана async ортосунда кандай айырмачылыктар бар?

sobes.tech AI

AIден жооп

launch ичинде каталар түз эле корутиндин ата-энеси контекстине тарайт, ал иштетилбесе, колдонмонун кулашына алып келет. async ичинде каталар кечиктирилет жана only .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}")
    }
}