Middle+
Koritlerin iptal edilemeyeceği durumlar var mı?
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, mevcutturlar.
Böyle durumlara örnekler:
- Coroutine, düzenli iptal kontrolleri olmadan uzun süren bir hesaplama görevi gerçekleştiriyor. Coroutine, yalnızca
suspendingsırasındaisActive'i kontrol eder. Görev duraklatılmadıkça (örneğin, uzun bir döngü veya matematiksel hesaplamalar) iptal isteğini fark etmez. - İptal istisnası yakalama yapılmaz (örneğin,
CancellationExceptionyakalanmaz). Coroutine sona erebilir, ancak ebeveyn coroutine veya görev yöneticisi iptalden haberdar olmaz ve kaynaklar düzgün şekilde serbest bırakılmayabilir. Dispatchers.Unconfinedveya kooperatif olmayan thread havuzunu kullanan planlayıcılar gibi kooperatif olmayan planlayıcıların kullanımı.CancellationExceptionyine de atılsa da, davranış tahmin edilemez olabilir.- Bloklayıcı giriş/çıkış işlemlerinin,
withContext(Dispatchers.IO)ve suspending fonksiyonlar kullanılmadan, döngü içindeInputStreamokuma gibi, sarmalanmadan kullanılması. Bloklayıcı işlem, coroutine durumunu kontrol etmez veCancellationExceptionatmaz.
Kooperatif iptal için, coroutine şu şartları sağlamalıdır:
Cooperative Cancellationdestekleyen bir dispatcher kullanmalı (örneğin,Dispatchers.Default,Dispatchers.IO,Dispatchers.Main).- Düzenli olarak
isActivekontrol etmeli veya bunu yapan suspending fonksiyonlar kullanmalı. CancellationException'ı doğru şekilde işlemesi gerekir.