Middle
Pověz mi o mechanismu zrušení v DispatchWorkItem.
sobes.tech AI
Odpověď od AI
DispatchWorkItem představuje blok kódu, který lze naplánovat k provedení ve frontě dispatch, a který lze zrušit před jeho skutečným provedením.
Zrušení je implementováno pomocí vlajky uvnitř DispatchWorkItem. Mechanismus zrušení je kooperativní: DispatchWorkItem musí pravidelně kontrolovat svůj stav zrušení.
Voláním metody cancel() u DispatchWorkItem se nastaví vlajka zrušení. Skutečné přerušení provádění nastává pouze tehdy, pokud je tato vlajka v rámci bloku kódu DispatchWorkItem kontrolována pomocí vlastnosti isCancelled.
Příklad použití:
let úkol: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !self.isCancelled else { // Kontrola vlajky zrušení
print("Operace zrušena při iteraci \(i)")
return // Ukončení provádění
}
// Provádění užitečné práce
Thread.sleep(forTimeInterval: 0.1) // Simulace dlouhé operace
}
print("Operace dokončena")
}
DispatchQueue.global().async(execute: úkol)
// Zrušit práci po 1 sekundě
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
úkol.cancel()
}
Hlavní body:
- Okamžité zrušení není garantováno; záleží na frekvenci kontroly
isCancelleduvnitř bloku. - Zrušený
DispatchWorkItemmůže být zařazen do fronty, ale jeho blok nebude vykonán, pokud jeisCancelledzkontrolováno před začátkem. - Volání
cancel()na již provedeném nebo zrušenémDispatchWorkItemnemá efekt.
Vlastnosti:
| Vlastnost | Typ | Popis |
|---|---|---|
isCancelled |
Bool |
Vrací true, pokud práce byla zrušena. |