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,
isCancelledyoxlamasının tezliyinə bağlıdır. - Ləğv edilmiş
DispatchWorkItemnövbəyə əlavə oluna bilər, lakin onun bloku başlamadan əvvəlisCancelledyoxlanarsa, 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. |