Sobes.tech
Junior — Middle

Как се осъществява обработката на изключения вътре в корутините във вашия опит?

sobes.tech AI

Отговор от AI

Обработката на изключения в корутините в Android обикновено се извършва чрез блокове try-catch вътре в самата корутина или чрез специални механизми като CoroutineExceptionHandler.

Ако възникне изключение вътре в корутината, то може да бъде уловено по следния начин:

launch {
    try {
        // код, който може да предизвика изключение
    } catch (e: Exception) {
        // обработка на изключението
    }
}

За глобална обработка на неуловени изключения може да се използва CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Хванато $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Грешка")
}

Важно е да се помни, че изключенията в корутините, стартирани чрез launch, се предават към обработчика, а в корутините, стартирани чрез async, изключението ще бъде хвърлено при извикване на await().

Затова при използване на async трябва да обградите извикването на await() с try-catch, за да се обработят грешките.