Sobes.tech
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։