Junior — Middle
Milyen megközelítéseket és módszereket használnak a Kotlin korutinok hibakezelésére?
sobes.tech MI
Válasz az MI-től
Kotlinban több megközelítés is létezik a hibakezelésre a korutinokban:
- try-catch a korutinon belül — a legegyszerűbb módja a kivételek kezelésének. A kódot
launchvagyasyncblokkbantry-catch-be lehet csomagolni.
launch {
try {
// kód, ami kivételt dobhat
} catch (e: Exception) {
// hibakezelés
}
}
- CoroutineExceptionHandler — egy speciális kezelő, amit a korutin kontextusába lehet adni. Elkapja a nem kezelt kivételeket a
launch-al indított korutinokban.
val handler = CoroutineExceptionHandler { _, exception ->
println("Elkapott $exception")
}
GlobalScope.launch(handler) {
throw RuntimeException("Hiba")
}
- Hibakezelés async/await esetén — az
asynchasználatakor a kivételek nem azonnal dobódnak, hanem azawait()hívásakor. Ezért azawait()-ettry-catch-be kell tenni.
val deferred = async {
// kód
throw Exception("Hiba")
}
try {
deferred.await()
} catch (e: Exception) {
// kezelés
}
- SupervisorJob és SupervisorScope — lehetővé teszik a gyermek korutinok hibáinak izolálását, így egy hiba nem törli az egész szülő scope-ot.
A módszer kiválasztása tehát a kontextustól és a korutin típusától (launch vagy async) függ.