Comment annuler l'exécution des tâches synchrones dans iOS?
sobes.tech IA
Réponse de l'IA
Il n'y a pas d'annulation directe des tâches synchrones (qui bloquent le thread actuel) sans interrompre l'exécution du thread.
Pour simuler l'annulation d'une tâche synchrone, vous pouvez utiliser les approches suivantes :
-
Vérification régulière d'un drapeau d'annulation : Ajoutez dans la logique de la tâche synchrone une vérification d'un drapeau booléen, qui est défini de l'extérieur lorsque l'annulation est nécessaire. Si le drapeau est défini, la tâche se termine prématurément.
var isCancelled = false func performSynchronousTask() { // Début de la tâche for i in 0..<100000 { if isCancelled { print("Tâche annulée") return // Sortie anticipée } // Exécution d'une partie du travail // ... calculs longs ou opérations } print("Tâche terminée") } func cancelTask() { isCancelled = true } // Exemple d'utilisation // performSynchronousTask() // Appel synchrone // cancelTask() // Appeler depuis un autre thread pour annuler -
Utilisation de
try? Task.checkCancellation()dans un contexte asynchrone : Si la tâche synchrone s'exécute dans unTasken contexte asynchrone de Swift Concurrency, vous pouvez l'appeler périodiquement. Si la tâche est annulée, cette appel lancera uneCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Vérification de l'annulation // Exécution d'une partie du travail // ... } } // Exemple d'utilisation dans un contexte asynchrone /* let task = Task { do { try performCancellableSynchronousWork() print("Tâche terminée") } catch is CancellationError { print("Tâche annulée") } catch { print("Une erreur est survenue : \(error)") } } // Pour annuler la tâche // task.cancel() */