Sobes.tech
Junior — Middle

Peut-on interrompre l'exécution d'une tâche dans GCD avant sa fin?

sobes.tech IA

Réponse de l'IA

Dans GCD (Grand Central Dispatch), il n'est pas possible d'interrompre directement l'exécution d'une tâche déjà lancée. Les tâches envoyées à la file d'attente s'exécutent jusqu'à leur achèvement.

Cependant, il est possible d'annuler une tâche de manière indirecte :

  • Pour les tâches asynchrones, utiliser DispatchWorkItem, qui supporte la méthode cancel(). La tâche elle-même doit vérifier périodiquement la propriété isCancelled et se terminer correctement si une annulation est demandée.

Exemple :

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Tâche annulée")
            return
        }
        // Exécuter le travail
    }
}

DispatchQueue.global().async(execute: workItem)

// Plus tard
workItem.cancel()

Ainsi, l'annulation n'est possible que si la tâche supporte la vérification de l'annulation, sinon, il n'est pas possible de l'interrompre de force.