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