Sobes.tech
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.