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