Sobes.tech
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, isCancelled kontrol sıklığına bağlıdır.
  • İptal edilen DispatchWorkItem kuyruğa alınabilir, ancak isCancelled kontrol edilmeden önce başlatılırsa, bloğu çalıştırılmaz.
  • Zaten yürütülmüş veya iptal edilmiş bir DispatchWorkItem üzerinde cancel() çağrısı etkili değildir.

Özellikler:

Özellik Tip Açıklama
isCancelled Bool İş iptal edildiyse true döner.