Sobes.tech
Junior — Middle

Ինչպե՞ս է ձեր փորձում կատարվում արտակարգ իրավիճակների մշակումը կուռուտինների ներսում:

sobes.tech AI

Պատասխան AI-ից

Android-ում coroutine-ների մեջ արտակարգ իրավիճակների կառավարումը սովորաբար կատարվում է try-catch բլոկների միջոցով հենց coroutine-ի ներսում կամ հատուկ մեխանիզմների, ինչպիսիք են CoroutineExceptionHandler:

Եթե coroutine-ի ներսում արտակարգ իրավիճակ է առաջանում, այն կարելի է բռնել հետևյալ կերպ՝

launch {
    try {
        // կոդ, որը կարող է արտակարգ իրավիճակ առաջացնել
    } catch (e: Exception) {
        // արտակարգ իրավիճակի կառավարում
    }
}

Գլոբալ չհասցված արտակարգ իրավիճակների կառավարումը հնարավոր է իրականացնել CoroutineExceptionHandler-ի միջոցով՝

val handler = CoroutineExceptionHandler { _, exception ->
    println("Ատկատ $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Սխալ")
}

Կարևոր է հիշել, որ launch-ով սկսված coroutine-ների մեջ արտակարգ իրավիճակները փոխանցվում են handler-ին, իսկ async-ով սկսված coroutine-ների մեջ արտակարգ իրավիճակը կբացահայտվի await()-ի ժամանակ:

Հետևաբար, async-ի դեպքում անհրաժեշտ է շրջապատել await()-ի կանչը try-catch-ով՝ սխալները կառավարելու համար։