Junior — Middle
Ինչպե՞ս կառավարել արտահայտությունները `try/catch` օգտագործելով, որոնք տեղադրված են `launch` ֆունկցիայի դուրս, երբ սկսում եք կորուտիններ։
sobes.tech AI
Պատասխան AI-ից
Kotlin- ում, այն արտահայտությունները, որոնք տեղի են ունենում կորուտինների ներսում, հնարավոր չէ բռնել սովորական try/catch-ով, եթե դրանք տեղադրված են դրսից launch ֆունկցիայի, քանի որ launch սկսում է կորուտինն ասինխրոն և անմիջապես վերադարձնում է Job օբյեկտ, իսկ արտահայտությունները արդեն տեղի են ունենում այլ կոնտեքստում:
Որպեսզի կառավարեք արտահայտությունները, անհրաժեշտ է օգտագործել կառավարիչներ կորուտինում կամ հատուկ մեխանիզմներ:
- Օգտագործել
CoroutineExceptionHandlerկորուտինի կոնտեքստը ստեղծելիս: - Կառավարել արտահայտությունները կորուտինի ներսում try/catch-ով:
async-ով սկսված կորուտինների համար, արտահայտությունը կարելի է բռնելawait()կանչելով:
Օրինակ CoroutineExceptionHandler-ով:
val handler = CoroutineExceptionHandler { _, exception ->
println("Բռնված արտահայտություն: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Սխալ կորուտինում")
}
job.join()
Այսպիսով, launch-ից դուրս try/catch-ը չի աշխատի, այն պետք է բռնել կորուտինի ներսում կամ օգտագործել CoroutineExceptionHandler։