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
CoroutineExceptionHandlerkullanmak. - İstisnaları korutina içinde try/catch ile işlemek.
asyncile 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.