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

  1. try-catch a korutinon belül — a legegyszerűbb módja a kivételek kezelésének. A kódot launch vagy async blokkban try-catch-be lehet csomagolni.
launch {
    try {
        // kód, ami kivételt dobhat
    } catch (e: Exception) {
        // hibakezelés
    }
}
  1. 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")
}
  1. Hibakezelés async/await esetén — az async használatakor a kivételek nem azonnal dobódnak, hanem az await() hívásakor. Ezért az await()-et try-catch-be kell tenni.
val deferred = async {
    // kód
    throw Exception("Hiba")
}

try {
    deferred.await()
} catch (e: Exception) {
    // kezelés
}
  1. 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.