Middle
Պատմեք ինձ DispatchWorkItem-ում չեղարկման մեխանիզմի մասին։
sobes.tech AI
Պատասխան AI-ից
DispatchWorkItem ներկայացնում է կոդի բլոկ, որը կարող է պլանավորվել կատարման համար dispatch հերթում, և որը կարող է չեղարկվել իր իրական կատարման նախորդ։
Չեղարկումը իրականացվում է DispatchWorkItem-ի ներսում գտնվող դրոշակով։ Չեղարկման մեխանիզմը համագործակցային է. DispatchWorkItem-ը պետք է կանոնավոր կերպով ստուգի իր չեղարկման կարգավիճակը։
cancel() մեթոդը կանչելիս, նշվում է չեղարկման դրոշակը։ Իրական ընդհատումը տեղի է ունենում միայն այն դեպքում, եթե DispatchWorkItem-ի կոդի բլոկի ներսում այս դրոշակը ստուգվում է isCancelled հատկության միջոցով։
Օգտագործման օրինակ՝
let աշխատանք: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !self.isCancelled else { // Չեղարկման դրոշակի ստուգում
print("Գործողությունը չեղարկվել է \(i) կրկնության ժամանակ")
return // Վերջացնել կատարմանը
}
// Օգտակար աշխատանք կատարել
Thread.sleep(forTimeInterval: 0.1) // Երկար գործողության իմիտացիա
}
print("Գործողությունը ավարտվեց")
}
DispatchQueue.global().async(execute: աշխատանք)
// 1 վայրկյանի ընթացքում աշխատանքը չեղարկում
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
աշխատանք.cancel()
}
Հիմնական կետեր՝
- Անհապաղ չեղարկումը չի երաշխավորվում; դա կախված է
isCancelledստուգման հաճախականությունից բլոկի ներսում։ - Չեղարկված
DispatchWorkItem-ը կարող է տեղադրվել հերթում, բայց նրա բլոկը չի կատարվի, եթեisCancelled-ը ստուգվի սկսելուց առաջ։ cancel()-ի կանչը արդեն կատարված կամ չեղարկվածDispatchWorkItem-ի վրա չի ունենա ազդեցություն։
Արժեքներ՝
| Արժեք | Տիպ | Նկարագրություն |
|---|---|---|
isCancelled |
Bool |
Վերադարձնում է true, եթե աշխատանքը չեղարկված է։ |