Attualmente sto giocando con Grand Central Dispatch e ho scoperto una classe chiamata DispatchWorkItem
. La documentazione sembra un po 'incompleta quindi non sono sicuro di usarlo nel modo giusto. Ho creato il seguente frammento e mi aspettavo qualcosa di diverso. Mi aspettavo che l'oggetto fosse cancellato dopo aver chiamato cancel
su di esso. Ma l'iterazione continua per qualche motivo. Qualche idea su cosa sto facendo male? Il codice sembra a posto per me.Come fermare un DispatchWorkItem in GCD?
@IBAction func testDispatchItems() {
let queue = DispatchQueue.global(attributes:.qosUserInitiated)
let item = DispatchWorkItem { [weak self] in
for i in 0...10000000 {
print(i)
self?.heavyWork()
}
}
queue.async(execute: item)
queue.after(walltime: .now() + 2) {
item.cancel()
}
}
Grazie, è esattamente quello che stavo cercando. –
È possibile riutilizzare DispatchWorkItem dopo l'annullamento? – pixelfreak
@pixelfreak - No. Creane uno nuovo se vuoi ricominciare. – Rob