Sobes.tech
Junior — Middle

launch funksiyasından kənarda yerləşən try/catch istifadə edərək korutinləri işə salarkən istisnaları necə idarə etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də, korutinlər daxilində baş verən istisnalar dışında yerləşdirilmiş launch funksiyasından kənarda adi try/catch ilə tutulmamaq mümkündür, çünki launch korutinanı asinxron şəkildə işə salır və dərhal Job obyektini geri qaytarır, və istisnalar artıq başqa kontekstdə baş verir.

İstisnaları idarə etmək üçün, korutina daxilində istifadə olunan idarəedicilər və ya xüsusi mexanizmlər lazımdır:

  • Korutina kontekstinin yaradılmasında CoroutineExceptionHandler istifadə etmək.
  • İstisnaları korutina daxilində try/catch ilə işləmək.
  • async ilə başlatılan korutinalar üçün, await() çağırışında istisnaları tutmaq mümkündür.

CoroutineExceptionHandler ilə nümunə:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Yakalaşmış istisna: ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("Korutina xətası")
}

job.join()

Beləliklə, launch xaricində try/catch işləməyəcək, onu korutina daxilində tutmaq və ya CoroutineExceptionHandler istifadə etmək lazımdır.