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/catchkorutina 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. -
CoroutineExceptionHandlerisə, səhvlə bitən və lokal olaraq tutulmayan korutinlər üçün qlobal istisna idarəedicisidir. Yalnızlaunchilə başlayan korutinalar (onlarJobqaytarır) ilə işləyir,asyncilə deyil (onlarDeferredqaytarır), çünkiasyncnəticəni almaq və səhvləri idarə etmək üçün açıqawaitç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.