Junior — Middle
Est-il possible d'annuler l'exécution d'une tâche lors de l'utilisation de GCD dans iOS?
sobes.tech IA
Réponse de l'IA
Dans GCD (Grand Central Dispatch) sur iOS, il n'est pas possible d'annuler directement l'exécution d'une tâche si celle-ci a déjà commencé. GCD ne fournit pas de mécanisme intégré pour interrompre un bloc en cours d'exécution.
Cependant, une annulation indirecte peut être mise en œuvre :
- Utiliser des drapeaux ou des variables d'état qui sont vérifiés à l'intérieur du bloc de la tâche, et terminer prématurément si nécessaire.
- Pour les opérations asynchrones, utiliser DispatchWorkItem, qui supporte la méthode cancel(). L'annulation via DispatchWorkItem empêche le lancement de la tâche si elle n'a pas encore commencé.
Exemple avec DispatchWorkItem :
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Tâche annulée")
return
}
// Effectuer le travail
print(i)
}
}
DispatchQueue.global().async(execute: workItem)
// Annuler la tâche
workItem.cancel()
Ainsi, l'annulation est possible avant le début de l'exécution ou à l'intérieur de la tâche en vérifiant le drapeau, mais il n'est pas possible d'interrompre un bloc déjà en cours d'exécution dans GCD.