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}")
}
}