Sobes.tech
Middle

DispatchWorkItem-də ləğv etmə mexanizmi haqqında danış.

sobes.tech Süni İntellekt

AI-dan cavab

DispatchWorkItem kod bloku təyin edilə bilən və icra üçün dispatch növbəsinə planlaşdırıla bilən, və onun faktiki icrasından əvvəl ləğv edilə bilən bir kod blokudur.

Ləğv etmə DispatchWorkItem daxilindəki bayraq vasitəsilə həyata keçirilir. Ləğv mexanizmi kooperativdir: DispatchWorkItem öz ləğv vəziyyətini mütəmadi yoxlamalıdır.

cancel() metodunu çağırmaqla, ləğv bayrağı qurulur. Əsl icra yalnız DispatchWorkItem kod blokunda bu bayrağın isCancelled xüsusiyyəti ilə yoxlanması halında dayandırılır.

İstifadə nümunəsi:

let tapşırıq: DispatchWorkItem = DispatchWorkItem {
    for i in 0..<100 {
        guard !self.isCancelled else { // Ləğv bayrağını yoxlamaq
            print("Əməliyyat \(i) iterasiyasında ləğv edildi")
            return // İcrağı bitir
        }
        // Faydalı işi yerinə yetir
        Thread.sleep(forTimeInterval: 0.1) // Uzun əməliyyatın simulasyonu
    }
    print("Əməliyyat tamamlandı")
}

DispatchQueue.global().async(execute: tapşırıq)

// İş 1 saniyə sonra ləğv edilir
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
    tapşırıq.cancel()
}

Əsas nöqtələr:

  • Dərhal ləğv etmək təmin edilmir; bu, isCancelled yoxlamasının tezliyinə bağlıdır.
  • Ləğv edilmiş DispatchWorkItem növbəyə əlavə oluna bilər, lakin onun bloku başlamadan əvvəl isCancelled yoxlanarsa, icra olunmayacaq.
  • Artıq icra edilmiş və ya ləğv edilmiş DispatchWorkItem üzərində cancel() çağırışının effekti yoxdur.

Xüsusiyyətlər:

Xüsusiyyət Tip Təsviri
isCancelled Bool Əgər iş ləğv edilibsə, true qaytarır.