Try/catch yapısı kullanarak coroutine içindeki hata işleme ile CoroutineExceptionHandler kullanımı nasıl farklıdır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de, korutinlerde hata yönetimi iki şekilde yapılabilir: try/catch ile korutina içinde ve CoroutineExceptionHandler ile.
-
Korutina içindeki
try/catch, korutina kod bloğunda oluşan istisnaları yerel olarak yakalamayı sağlar. Bu, hatanın oluştuğu yerde doğrudan işlemek istediğinizde kullanışlıdır. -
CoroutineExceptionHandlerise, hata ile sona eren ve yerel olarak yakalanmamış korutinler için küresel bir istisna yöneticisidir. Sadecelaunchile başlatılan (birJobdönen) korutinlerle çalışır,asyncile başlatılanlar (Deferreddöner) ile çalışmaz çünküasync, sonucu almak ve istisnaları işlemek için açıkçaawaitçağrısı gerektirir.
Örnek:
val handler = CoroutineExceptionHandler { _, exception ->
println("CoroutineExceptionHandler'da yakalanan istisna: $exception")
}
GlobalScope.launch(handler) {
try {
// İstisna atabilecek kod
throw RuntimeException("Korutina içinde hata")
} catch (e: Exception) {
println("Yerel yakalama: $e")
}
}
Eğer istisna try/catch ile yakalanmışsa, CoroutineExceptionHandler tetiklenmez. Eğer istisna yerel olarak işlenmemişse, CoroutineExceptionHandler'a iletilir. Bu şekilde, try/catch yerel işleme sağlar, CoroutineExceptionHandler ise küresel olup, işlenmeyen istisnalar için loglama veya diğer işlemler için kullanılır.