Sobes.tech
Junior — Middle

Try/catch quruluşundan istifadə edərək korutinlərdə səhv idarəetməsi ilə CoroutineExceptionHandler istifadə arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də, korutinlərdə səhvlərin idarə olunması iki yolla həyata keçirilə bilər: try/catch ilə korutina daxilində və CoroutineExceptionHandler ilə.

  • Korutina daxilində try/catch korutina kod blokunda baş verən istisnaları lokal şəkildə tutmağa imkan verir. Bu, səhvin baş verə biləcəyi yerdə onu birbaşa idarə etmək istədiyiniz zaman əlverişlidir.

  • CoroutineExceptionHandler isə, səhvlə bitən və lokal olaraq tutulmayan korutinlər üçün qlobal istisna idarəedicisidir. Yalnız launch ilə başlayan korutinalar (onlar Job qaytarır) ilə işləyir, async ilə deyil (onlar Deferred qaytarır), çünki async nəticəni almaq və səhvləri idarə etmək üçün açıq await çağırışını tələb edir.

Nümunə:

val handler = CoroutineExceptionHandler { _, exception ->
    println("CoroutineExceptionHandler-də tutulan istisna: $exception")
}

GlobalScope.launch(handler) {
    try {
        // İstisna ata bilən kod
        throw RuntimeException("Korutina daxilində xəta")
    } catch (e: Exception) {
        println("Lokal olaraq tutuldu: $e")
    }
}

Əgər istisna try/catch ilə tutulursa, CoroutineExceptionHandler işə düşməz. Əks halda, istisna CoroutineExceptionHandler-a göndəriləcək. Beləliklə, try/catch lokal idarəetmə təmin edir, CoroutineExceptionHandler isə qlobal və qeyri-işlənmiş istisnalar üçün qeydiyyat və ya digər əməliyyatlar üçün istifadə olunur.