Middle
Je možné neskôr zrušiť úlohu pridanú do fronty?
sobes.tech AI
Odpoveď od AI
Áno, je to možné, ak úloha ešte nezačala.
Pre Operation:
Môžete zavolať metódu cancel(). Ak operácia už prebieha, vlajka isCancelled sa stane true, a vývojár musí jej zrušenie spracovať v logike operácie.
let operation = BlockOperation {
// Logika operácie, ktorá by mala kontrolovať operation.isCancelled
if OperationQueue.current?.isCancelled ?? false {
print("Operácia zrušená")
return
}
// Ďalšia práca
}
let queue = OperationQueue()
queue.addOperation(operation)
// Neskôr, ak je potrebné, zrušiť
operation.cancel()
Pre DispatchWorkItem:
Vytvorí sa inštancia DispatchWorkItem, ktorá sa následne odošle do fronty. Na zrušenie sa volá metóda cancel(). Rovnako ako pri Operation, je to vlajka pre vývojára.
let item = DispatchWorkItem {
// Logika úlohy, ktorá by mala kontrolovať item.isCancelled
if item.isCancelled {
print("Úloha zrušená")
return
}
// Ďalšia práca
}
let queue = DispatchQueue.global()
queue.async(execute: item)
// Neskôr, ak je potrebné, zrušiť
item.cancel()
Na zrušenie úlohy, ktorá už začala, je potrebné, aby kód vo vnútri úlohy výslovne kontroloval vlajku zrušenia (isCancelled). Ak úloha túto vlajku nekontroluje, bude pokračovať vo vykonávaní až do dokončenia.