Middle
Povedz mi o mechanizme zrušenia v DispatchWorkItem.
sobes.tech AI
Odpoveď od AI
DispatchWorkItem predstavuje blok kódu, ktorý možno naplánovať na vykonanie vo fronte dispatch a ktorý možno zrušiť pred jeho skutočným vykonaním.
Zrušenie je implementované pomocou vlajky vo vnútri DispatchWorkItem. Mechanizmus zrušenia je kooperatívny: DispatchWorkItem musí pravidelne kontrolovať svoj stav zrušenia.
Volaním metódy cancel() na DispatchWorkItem sa nastaví vlajka zrušenia. Skutočné prerušenie vykonávania nastáva iba v prípade, ak je táto vlajka v rámci bloku kódu DispatchWorkItem kontrolovaná pomocou vlastnosti isCancelled.
Príklad použitia:
let úloha: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !self.isCancelled else { // Kontrola vlajky zrušenia
print("Operácia zrušená pri iterácii \(i)")
return // Ukončenie vykonávania
}
// Vykonanie užitočnej práce
Thread.sleep(forTimeInterval: 0.1) // Simulácia dlhého procesu
}
print("Operácia dokončená")
}
DispatchQueue.global().async(execute: úloha)
// Zrušiť prácu po 1 sekunde
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
úloha.cancel()
}
Hlavné body:
- Okamžité zrušenie nie je garantované; závisí od frekvencie kontroly
isCancelledv bloku. - Zrušený
DispatchWorkItemmôže byť vložený do fronty, ale jeho blok nebude vykonaný, ak jeisCancelledskontrolované pred začatím. - Volanie
cancel()na už vykonanom alebo zrušenomDispatchWorkItemnemá efekt.
Vlastnosti:
| Vlastnosť | Typ | Popis |
|---|---|---|
isCancelled |
Bool |
Vráti true, ak bola práca zrušená. |