Come annullare l'esecuzione di attività sincrone in iOS?
sobes.tech AI
Risposta dell'AI
Non esiste una cancellazione diretta di compiti sincroni (che bloccano il thread corrente) senza interrompere l'esecuzione del thread.
Per simulare la cancellazione di un compito sincrono, puoi usare i seguenti approcci:
-
Verifica regolare di una bandiera di cancellazione: Aggiungi alla logica del compito sincrono un controllo di una bandiera booleana, impostata esternamente quando è necessario cancellare. Se la bandiera è impostata, il compito termina prematuramente.
var isCancelled = false func performSynchronousTask() { // Inizio del compito for i in 0..<100000 { if isCancelled { print("Compito cancellato") return // Uscita anticipata } // Esecuzione di parte del lavoro // ... calcoli lunghi o operazioni } print("Compito completato") } func cancelTask() { isCancelled = true } // Esempio di utilizzo // performSynchronousTask() // Chiamata sincrona // cancelTask() // Chiamare da un altro thread per cancellare -
Utilizzo di
try? Task.checkCancellation()in un contesto asincrono: Se il compito sincrono viene eseguito all'interno diTaskin un contesto asincrono di Swift Concurrency, si può chiamare periodicamentetry? Task.checkCancellation(). In caso di cancellazione, questa chiamata lancerà unCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Verifica di cancellazione // Esecuzione di parte del lavoro // ... } } // Esempio di utilizzo in un contesto asincrono /* let task = Task { do { try performCancellableSynchronousWork() print("Compito completato") } catch is CancellationError { print("Compito cancellato") } catch { print("Si è verificato un errore: \(error)") } } // Per cancellare il compito // task.cancel() */