Sobes.tech
Middle

Lehet később törölni egy sorba tett feladatot?

sobes.tech MI

Válasz az MI-től

Igen, ez lehetséges, ha a feladat még nem kezdődött el.

Operation esetén: Hívhatja a cancel() metódust. Ha a művelet már folyamatban van, az isCancelled zászló true lesz, és a fejlesztőnek saját magának kell kezelnie a törlést a művelet logikájában.

let operation = BlockOperation {
    // A művelet logikája, amelynek ellenőriznie kell az operation.isCancelled-t
    if OperationQueue.current?.isCancelled ?? false {
        print("Művelet törölve")
        return
    }
    // További munka
}

let queue = OperationQueue()
queue.addOperation(operation)

// Később, ha szükséges, törölje
operation.cancel()

A DispatchWorkItem esetén: Létrehozunk egy példányt a DispatchWorkItem-ből, amelyet később a sorba küldünk. A törléshez a cancel() metódust hívjuk. Hasonlóan az Operation-höz, ez egy zászló a fejlesztő számára.

let item = DispatchWorkItem {
    // A feladat logikája, amelynek ellenőriznie kell az item.isCancelled-t
    if item.isCancelled {
        print("Feladat törölve")
        return
    }
    // További munka
}

let queue = DispatchQueue.global()
queue.async(execute: item)

// Később, ha szükséges, törölje
item.cancel()

Egy már elkezdett feladat törléséhez a kódnak egyértelműen ellenőriznie kell az isCancelled zászlót a feladat belsejében. Ha a feladat nem ellenőrzi ezt a zászlót, akkor a végrehajtás folytatódik a befejezéséig.