Middle
Pastāstiet man par atcelšanas mehānismu DispatchWorkItem.
sobes.tech AI
Atbilde no AI
DispatchWorkItem irr ir kodu bloks, ko var plānot izpildi darbus dispečera rindā, un to var atcelt pirms tā faktiskas izpildes.
Atcelšana tiek īstenota caur DispatchWorkItem iekšējo zīmi. Atcelšanas mehānisms ir kooperatīvs: DispatchWorkItem pats regulāri pārbauda savu atcelšanas statusu.
Izsaucot cancel() metodi DispatchWorkItem, zīme tiek iestatīta kā atcelta. Faktiska izpildes pārtraukšana notiek tikai tad, ja kodā tiek veikta šīs zīmes pārbaude ar isCancelled īpašību.
Piemērs lietošanai:
let darbs: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !saviem spēkiemVykdomaObjekts.isCancelled else { // Atcelšanas zīmes pārbaude
print("Operācija atcelta iterācijā \(i)")
return // Izpildes pabeigšana
}
// Noderīga darba izpilde
Thread.sleep(forTimeInterval: 0.1) // Ilgas operācijas imitācija
}
print("Operācija pabeigta")
}
DispatchQueue.global().async(execute: darbs)
// Darba atcelšana pēc 1 sekundes
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
darbs.cancel()
}
Galvenie punkti:
- Nekavējoša atcelšana nav garantēta; atkarīga no
isCancelledpārbaudes biežuma blokā. - Atcelts
DispatchWorkItemvar tikt ievietots rindā, bet tā bloks netiks izpildīts, jaisCancelledtiks pārbaudīts pirms izpildes sākuma. cancel()izsaukšana jau izpildītam vai atceltiemDispatchWorkItemnav efektīva.
Īpašības:
| Īpašība | Tips | Apraksts |
|---|---|---|
isCancelled |
Bool |
Atgriež true, ja darbs ir atcelts. |