Middle
Peut-on annuler une tâche ajoutée à la file d'attente ultérieurement?
sobes.tech IA
Réponse de l'IA
Oui, c'est possible si la tâche n'a pas encore commencé.
Pour Operation :
Vous pouvez appeler la méthode cancel(). Si l'opération est déjà en cours, le drapeau isCancelled sera mis à true, et le développeur doit gérer sa annulation dans la logique de l'opération.
let operation = BlockOperation {
// Logique de l'opération, qui doit vérifier operation.isCancelled
if OperationQueue.current?.isCancelled ?? false {
print("Opération annulée")
return
}
// Travail supplémentaire
}
let queue = OperationQueue()
queue.addOperation(operation)
// Plus tard, si besoin d'annuler
operation.cancel()
Pour DispatchWorkItem :
Une instance de DispatchWorkItem est créée, puis envoyée dans la file d'attente. Pour annuler, la méthode cancel() est appelée. Comme avec Operation, c'est un drapeau pour le développeur.
let item = DispatchWorkItem {
// Logique de la tâche, qui doit vérifier item.isCancelled
if item.isCancelled {
print("Tâche annulée")
return
}
// Travail supplémentaire
}
let queue = DispatchQueue.global()
queue.async(execute: item)
// Plus tard, si besoin d'annuler
item.cancel()
Pour annuler une tâche qui a déjà commencé, il est nécessaire que le code à l'intérieur de la tâche vérifie explicitement le drapeau d'annulation (isCancelled). Si la tâche ne vérifie pas ce drapeau, elle continuera à s'exécuter jusqu'à sa fin.