Hoe kun je de uitvoering van synchronisatie taken in iOS annuleren?
sobes.tech AI
Antwoord van AI
Er is geen directe annulering van synchronische taken (die de huidige thread blokkeren) zonder de uitvoering van de thread te onderbreken.
Om het annuleren van een synchronische taak te simuleren, kunt u de volgende benaderingen gebruiken:
-
Regelmatige controle van een annuleringsvlag: Voeg in de logica van de synchronische taak een controle toe van een booleaanse vlag, die extern wordt ingesteld wanneer annulering nodig is. Als de vlag is ingesteld, eindigt de taak voortijdig.
var isCancelled = false func performSynchronousTask() { // Begin van de taak for i in 0..<100000 { if isCancelled { print("Taak geannuleerd") return // Vroegtijdig verlaten } // Uitvoeren van een deel van het werk // ... lange berekeningen of operaties } print("Taak voltooid") } func cancelTask() { isCancelled = true } // Voorbeeld van gebruik // performSynchronousTask() // Synchrone oproep // cancelTask() // Van een andere thread aanroepen om te annuleren -
Gebruik van
try? Task.checkCancellation()in een asynchrone context: Als de synchronische taak wordt uitgevoerd binnen eenTaskin een asynchrone context van Swift Concurrency, kan deze periodiek worden aangeroepen. Bij annulering zal dezeCancellationErrorwerpen.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Controle op annulering // Uitvoeren van een deel van het werk // ... } } // Voorbeeld van gebruik in een asynchrone context /* let task = Task { do { try performCancellableSynchronousWork() print("Taak voltooid") } catch is CancellationError { print("Taak geannuleerd") } catch { print("Er is een fout opgetreden: \(error)") } } // Om de taak te annuleren // task.cancel() */