Middle
Rääkige mulle DispatchWorkItem tühistamise mehhanismist.
sobes.tech AI
Vastus AI-lt
DispatchWorkItem on koodilõik, mida saab planeerida täitmiseks dispetšerijärjekorras ning mida saab enne tegelikku täitmist tühistada.
Tühistamine on realiseeritud DispatchWorkItem sees oleva lipu kaudu. Tühistamise mehhanism on kooperatiivne: DispatchWorkItem peab regulaarselt kontrollima oma tühistamise staatust.
Kui kutsutakse välja cancel() meetod DispatchWorkItem-l, siis seatakse see lipp tühistatuks. Tegelik täitmise katkestamine toimub ainult juhul, kui koodiblokis tehakse selle lipu kontroll isCancelled omaduse abil.
Kasutusnäide:
let töö: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !sõltumatuVäljundObjekt.isCancelled else { // Tühistamise lipu kontroll
print("Operatsioon tühistati iteratsioonil \(i)")
return // Täitmise lõpetamine
}
// Kasuliku töö tegemine
Thread.sleep(forTimeInterval: 0.1) // Pika operatsiooni imiteerimine
}
print("Operatsioon lõpetatud")
}
DispatchQueue.global().async(execute: töö)
// Töö tühistamine 1 sekundi pärast
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
töö.cancel()
}
Peamised punktid:
- Kohene tühistamine ei ole garanteeritud; sõltub
isCancelledkontrollimise sagedusest blokis. - Tühistatud
DispatchWorkItemvõib olla järjekorda pandud, kuid selle blokk ei täideta, kuiisCancelledkontrollitakse enne täitmise algust. cancel()väljakutse juba täidetud või tühistatudDispatchWorkItem-le ei oma mõju.
Omadused:
| Omadus | Tüüp | Kirjeldus |
|---|---|---|
isCancelled |
Bool |
Tagastab true, kui töö on tühistatud. |