Junior — Middle
Чӣ тавр бояд истисноҳоро ҳангоми оғоз кардани корутинҳо бо истифода аз try/catch, ки дар беруни функсияи launch ҷойгир шудааст, идора кард?
sobes.tech AI
Ҷавоб аз AI
Дар Kotlin, истисно, ки дар дохили корутинҳо рух медиҳанд, бо истифодаи try/catch оддӣ дар берун аз функсияи launch наметавон дастгирӣ шаванд, зеро launch корутинро асинхронӣ оғоз мекунад ва фавран объекти Job-ро бармегардонад, ва истисноҳо аллакай дар дигар контекст рӯй медиҳанд.
Барои идора кардани истисноҳо, бояд дар дохили корутин ё механизми махсус истифода бурда шаванд:
- Истифодаи
CoroutineExceptionHandlerҳангоми эҷоди контексти корутин. - Идоракунии истисноҳо дар дохили худи корутин бо кӯмак аз try/catch.
- Барои корутинҳое, ки тавассути
asyncоғоз мешаванд, истисноҳоро дар вақти даъватиawait()гирифтан мумкин аст.
Масалан бо CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Истиснои дастгирӣшуда: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Хатои дар корутин")
}
job.join()
Бинобар ин, try/catch дар берун аз launch кор намекунад, онро бояд дар дохили корутин дастгирӣ кард ё истифода аз CoroutineExceptionHandler.