Junior — Middle
Эгерде анын ичинде launch бар жана исключение болсо, async аткаруу токтотулуп калабы?
sobes.tech AI
AIден жооп
Kotlin Coroutines-да, эгер async блоктун ичинде launch аркылуу coroutine ишке киргизилсе, launch ичинде пайда болгон ката автоматтык түрдө async аткарылышын токтотпойт.
Маселе, async жана launch ар башка ката иштетүү механизмдерине ээ болгон ар башка coroutine түзүшөт:
asyncDeferredкайтарат жана анын ичинде пайда болгон каталарawait()чакырылганда өткөрүлүп берилет.launchнатыйжасы жок coroutine иштетет жана анын ичинде пайда болгон катаCoroutineExceptionHandlerаркылуу иштетилет же ата-эне coroutine токтотууга алып келет.
Эгер launch async ичинде анын Job менен так байланышы жок болсо, launch ичиндеги каталар async-ти токтотпойт. Токтотууну камсыздоо үчүн, launch-ды ошол эле CoroutineScope ичинде иштетүү же SupervisorJob колдонуу же каталарды так иштетүү керек.
Мисал:
val deferred = async {
launch {
throw Exception("launch ичинде катоо")
}
// async иши уланат
}
// launch-тан чыккан катоо, `await()` чакырылбаганда, deferred-ке таасир этпейт