Sobes.tech
Junior — Middle

Hogyan kezeljük a kivételeket a korutinok indításakor try/catch használatával, amely a launch függvényen kívül van?

sobes.tech MI

Válasz az MI-től

Kotlinben a korutinok belsejében keletkező kivételeket nem lehet hagyományos try/catch segítségével elkapni, ha azok kívül helyezkednek el a launch függvényen, mert a launch aszinkron módon indítja a korutint, és azonnal visszaad egy Job objektumot, a kivételek pedig már más kontextusban fordulnak elő.

A kivételek kezeléséhez a korutin belsejében lévő kezelőket vagy speciális mechanizmusokat kell használni:

  • Használja a CoroutineExceptionHandler-t a korutin kontextusának létrehozásakor.
  • Kezelje a kivételeket a korutinon belül try/catch segítségével.
  • Az async-szal indított korutinok esetén a kivételt az await() hívásakor lehet elkapni.

Példa a CoroutineExceptionHandler-rel:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Elkapott kivétel: ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("Hiba a korutinban")
}

job.join()

Így a launch-on kívüli try/catch nem fog működni, azt a korutin belsejében kell elkapni, vagy a CoroutineExceptionHandler-t kell használni.