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.