Ինչպես է տարբերվում սխալների կառավարումը կորժիններում try/catch կառուցվածքի օգտագործմամբ և CoroutineExceptionHandler-ի օգտագործմամբ?
sobes.tech AI
Պատասխան AI-ից
Kotlin-ում սխալների կառավարումը կորուտիններում կարող է իրականացվել երկու եղանակով՝ try/catch-ի միջոցով կորուտինում և CoroutineExceptionHandler-ի միջոցով:
-
try/catchկորուտինում թույլ է տալիս տեղական բռնել այն արտահայտությունները, որոնք տեղի են ունենում կորուտինի կոդի բլոկում: Սա հարմար է, երբ ցանկանում եք անմիջապես այնտեղ, որտեղ կարող է տեղի ունենալ սխալը, այն կառավարել: -
CoroutineExceptionHandler— դա գլոբալ արտակարգ իրավիճակների կառավարիչ է այն կորուտինների համար, որոնք ավարտվում են սխալով և չեն բռնվել տեղական։ Այն աշխատում է միայնlaunch-ով սկսված կորուտինների հետ (որոնք վերադարձնում ենJob), ոչ թեasync-ի հետ (որոնք վերադարձնում ենDeferred), քանի որasync-ը պահանջում է բացահայտawait-ի կանչ, որպեսզի ստանա արդյունքը և կառավարի սխալները:
Օրինակ՝
val handler = CoroutineExceptionHandler { _, exception ->
println("CoroutineExceptionHandler-ում բռնված արտահայտություն՝ $exception")
}
GlobalScope.launch(handler) {
try {
// Կոդ, որը կարող է արտահայտություն գցել
throw RuntimeException("Սխալ կորուտինում")
} catch (e: Exception) {
println("Տեղական բռնում՝ $e")
}
}
Եթե արտահայտությունը բռնվում է try/catch-ով, CoroutineExceptionHandler-ը չի գործի։ Եթե արտահայտությունը չի բռնվում տեղական, այն կանցնի CoroutineExceptionHandler-ին։ Այսպիսով՝ try/catch-ը ապահովում է տեղական կառավարում, իսկ CoroutineExceptionHandler-ը՝ գլոբալ և ծառայում է անբացառված արտահայտությունների համար լոգավորման կամ այլ գործողությունների համար։