Sobes.tech
Junior — Middle

Hogyan történik a kivételek kezelése a korutinokon belül a tapasztalatod szerint?

sobes.tech MI

Válasz az MI-től

Az Androidon lévő coroutine-okban a kivételek kezelése általában try-catch blokkokkal történik a coroutine belsejében vagy speciális mechanizmusok, például a CoroutineExceptionHandler segítségével.

Ha egy kivétel keletkezik egy coroutine-on belül, azt így lehet elkapni:

launch {
    try {
        // kód, amely kivételt dobhat
    } catch (e: Exception) {
        // kivétel kezelése
    }
}

A nem kezelt kivételek globális kezeléséhez használható a CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Elkapva $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Hiba")
}

Fontos megjegyezni, hogy a launch-al indított coroutine-okban a kivételek átadódnak a kezelőnek, míg az async-al indított coroutine-okban a kivétel a await() hívásakor lesz dobva.

Ezért az async használatakor a await() hívást try-catch-be kell foglalni a hibák kezelése érdekében.