Middle
È possibile annullare un'attività aggiunta alla coda in seguito?
sobes.tech AI
Risposta dell'AI
Sì, è possibile se il compito non è ancora iniziato.
Per Operation:
Puoi chiamare il metodo cancel(). Se l'operazione è già in corso, il flag isCancelled diventerà true, e lo sviluppatore deve gestire la cancellazione all'interno della logica dell'operazione.
let operation = BlockOperation {
// Logica dell'operazione, che dovrebbe verificare operation.isCancelled
if OperationQueue.current?.isCancelled ?? false {
print("Operazione annullata")
return
}
// Lavoro successivo
}
let queue = OperationQueue()
queue.addOperation(operation)
// Più tardi, se necessario, annullare
operation.cancel()
Per DispatchWorkItem:
Viene creata un'istanza di DispatchWorkItem, che viene poi inviata in coda. Per annullare, si chiama il metodo cancel(). Come con Operation, questa è una bandiera per lo sviluppatore.
let item = DispatchWorkItem {
// Logica del compito, che dovrebbe verificare item.isCancelled
if item.isCancelled {
print("Compito annullato")
return
}
// Lavoro successivo
}
let queue = DispatchQueue.global()
queue.async(execute: item)
// Più tardi, se necessario, annullare
item.cancel()
Per annullare un compito che è già iniziato, è necessario che il codice all'interno del compito verifichi esplicitamente il flag di cancellazione (isCancelled). Se il compito non verifica questo flag, continuerà l'esecuzione fino al completamento.