Sobes.tech
Junior — Middle

launch функциясынын сыртында жайгашкан try/catch колдонуп корутиндерди ишке киргизүүдө кандайча исключенияларды иштетсе болот?

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()

Ошентип, launch сыртындагы try/catch иштебейт, аны корутиндин ичинде кармоо керек же CoroutineExceptionHandler колдонуу керек.