Middle
DispatchWorkItem'daki iptal mekanizması hakkında bana bilgi ver.
sobes.tech yapay zeka
AI'dan gelen yanıt
DispatchWorkItem, yürütülebilecek bir kod bloğunu temsil eder ve bu blok, dispatch kuyruğunda planlanabilir ve gerçek yürütülmeden önce iptal edilebilir.
İptal, DispatchWorkItem içindeki bir bayrak aracılığıyla uygulanır. İptal mekanizması kooperatiftir: DispatchWorkItem düzenli olarak iptal durumunu kontrol etmelidir.
cancel() yöntemi çağrıldığında, DispatchWorkItem içindeki iptal bayrağı ayarlanır. Gerçek yürütme yalnızca, DispatchWorkItem içindeki kod bloğu içinde bu bayrak isCancelled özelliği kullanılarak kontrol edilirse durdurulur.
Kullanım örneği:
let görev: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !self.isCancelled else { // İptal bayrağını kontrol et
print("İşlem \(i) iterasyonunda iptal edildi")
return // Yürütmeyi sonlandır
}
// Faydalı işi yap
Thread.sleep(forTimeInterval: 0.1) // Uzun bir işlemi taklit et
}
print("İşlem tamamlandı")
}
DispatchQueue.global().async(execute: görev)
// İşlemi 1 saniye sonra iptal et
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
görev.cancel()
}
Ana noktalar:
- Anında iptal garanti edilmez; bu,
isCancelledkontrol sıklığına bağlıdır. - İptal edilen
DispatchWorkItemkuyruğa alınabilir, ancakisCancelledkontrol edilmeden önce başlatılırsa, bloğu çalıştırılmaz. - Zaten yürütülmüş veya iptal edilmiş bir
DispatchWorkItemüzerindecancel()çağrısı etkili değildir.
Özellikler:
| Özellik | Tip | Açıklama |
|---|---|---|
isCancelled |
Bool |
İş iptal edildiyse true döner. |