Sobes.tech
Junior — Middle

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.

  • CoroutineExceptionHandler ise, hata ile sona eren ve yerel olarak yakalanmamış korutinler için küresel bir istisna yöneticisidir. Sadece launch ile başlatılan (bir Job dönen) korutinlerle çalışır, async ile başlatılanlar (Deferred döner) ile çalışmaz çünkü async, sonucu almak ve istisnaları işlemek için açıkça await ç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.