Sobes.tech
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.