Sobes.tech
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 isCancelled kontrollimise sagedusest blokis.
  • Tühistatud DispatchWorkItem võib olla järjekorda pandud, kuid selle blokk ei täideta, kui isCancelled kontrollitakse enne täitmise algust.
  • cancel() väljakutse juba täidetud või tühistatud DispatchWorkItem-le ei oma mõju.

Omadused:

Omadus Tüüp Kirjeldus
isCancelled Bool Tagastab true, kui töö on tühistatud.