Junior — Middle
İçinde launch bulunan ve istisna oluşan bir durumda async yürütmesi iptal edilecek mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin Coroutines içinde, async bloğu içinde launch kullanılarak başlatılan bir coroutine'de, launch içinde oluşan istisna otomatik olarak async'in yürütülmesini iptal etmez.
Bunun nedeni, async ve launch'ın farklı hata yönetimi mekanizmalarına sahip farklı coroutine'lar oluşturmasıdır:
async, birDeferreddöner ve içindeki hatalarawait()çağrıldığında iletilir.launch, sonuç döndürmeyen bir coroutine başlatır ve içindeki istisnalar CoroutineExceptionHandler aracılığıyla veya ana coroutine'in iptaline yol açar.
Eğer launch, açıkça onun Job'u ile bağlanmadan async içinde başlatılırsa, launch içindeki istisna async'i iptal etmez. İptali sağlamak için, launch aynı CoroutineScope içinde başlatılmalı veya SupervisorJob kullanılmalı veya hatalar açıkça işlenmelidir.
Örnek:
val deferred = async {
launch {
throw Exception("launch'ta hata")
}
// async devam eder
}
// launch'tan gelen istisna, `await()` çağrılmadıkça `deferred`'i etkilemez