Sobes.tech
Junior — Middle

launch fonksiyonunun dışında yer alan try/catch kullanarak korutinleri başlatırken istisnaları nasıl ele alırsınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'de, içindeki istisnalar launch fonksiyonu dışında yer alan try/catch ile yakalanamaz, çünkü launch korutinasını asenkron olarak başlatır ve hemen bir Job nesnesi döner, ve istisnalar zaten başka bir bağlamda meydana gelir.

İstisnaları yönetmek için, korutina içinde kullanıcısı veya özel mekanizmalar kullanılmalıdır:

  • Korutina bağlamını oluştururken CoroutineExceptionHandler kullanmak.
  • İstisnaları korutina içinde try/catch ile işlemek.
  • async ile başlatılan korutinalar için, await() çağrısı sırasında istisna yakalanabilir.

CoroutineExceptionHandler ile örnek:

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

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

job.join()

Bu nedenle, launch dışındaki try/catch çalışmaz, ya korutina içinde yakalanmalı ya da CoroutineExceptionHandler kullanılmalıdır.