Middle
Може ли касније отказати задатак који је додат у ред?
sobes.tech АИ
Одговор од АИ
Da, moguće je ako zadatak još nije započeo.
Za Operation:
Možete pozvati metodu cancel(). Ako je operacija već u toku, zastavica isCancelled će postati true, i programer mora samostalno da obradi njeno otkazivanje unutar logike operacije.
let operation = BlockOperation {
// Logika operacije, koja treba da proverava operation.isCancelled
if OperationQueue.current?.isCancelled ?? false {
print("Operacija otkazana")
return
}
// Dalji rad
}
let queue = OperationQueue()
queue.addOperation(operation)
// Kasnije, ako je potrebno, otkaži
operation.cancel()
Za DispatchWorkItem:
Kreira se instanca DispatchWorkItem, koja se zatim šalje u red. Za otkazivanje se poziva metoda cancel(). Kao i kod Operation, ovo je zastavica za programera.
let item = DispatchWorkItem {
// Logika zadatka, koja treba da proverava item.isCancelled
if item.isCancelled {
print("Zadatak otkazan")
return
}
// Dalji rad
}
let queue = DispatchQueue.global()
queue.async(execute: item)
// Kasnije, ako je potrebno, otkaži
item.cancel()
Za otkazivanje zadatka koji je već započeo, potrebno je da kod unutar zadatka eksplicitno proverava zastavicu otkazivanja (isCancelled). Ako zadatak ne proverava ovu zastavicu, nastaviće sa izvršavanjem do završetka.