Junior — Middle
Оё иҷрои async бекор карда мешавад, агар дар дохили он launch бошад ва хатогӣ рӯ диҳад?
sobes.tech AI
Ҷавоб аз AI
Дар Kotlin Coroutines, агар дар дохили блоки async як coroutine тавассути launch оғоз карда шавад, хатое, ки дар launch рӯй медиҳад, автоматӣ иҷрои async-ро бекор намекунад.
Омили ин аст, ки async ва launch coroutine-ҳои гуногун бо механизмҳои гуногуни идоракунии хато эҷод мекунанд:
asyncбаргардонандаиDeferredаст ва хатоҳои дар он дохилшуда ҳангоми даъватиawait()интиқол дода мешаванд.launchcoroutine-ро оғоз мекунад, ки натиҷа намедиҳад, ва хатогиҳо дар он тавассутиCoroutineExceptionHandlerё ба бекор кардани coroutine-ҳои падар оварда мешаванд.
Агар launch дар дохили async бо пайвастагии ошкоро бо Job-и он оғоз шавад, хатои дар launch рӯйдода async-ро бекор намекунад. Барои таъмини бекор кардан, бояд launch-ро дар ҳамон CoroutineScope оғоз кунед ё SupervisorJob-ро истифода баред ё хатоҳоро ошкоро идора кунед.
Масалан:
val deferred = async {
launch {
throw Exception("Хатои дар launch")
}
// иҷрои async идома меёбад
}
// Хатои аз `launch` гирифташуда, то он даме, ки `await()` даъват шавад, ба `deferred` таъсир намерасонад