Middle
Cum se poate anula executarea sarcinilor sincrone în iOS?
sobes.tech AI
Răspuns de la AI
Nu există o anulare directă a sarcinilor sincrone (care blochează firul curent) fără a întrerupe executarea firului.
Pentru a simula anularea unei sarcini sincrone, puteți utiliza următoarele abordări:
-
Verificarea regulată a unui steag de anulare: Adăugați în logica sarcinii sincrone o verificare a unui steag boolean, care este setat din exterior atunci când este necesară anularea. Dacă steagul este setat, sarcina se încheie prematur.
var isCancelled = false func performSynchronousTask() { // Începutul sarcinii for i in 0..<100000 { if isCancelled { print("Sarcină anulată") return // Ieșire anticipată } // Executarea unei părți din muncă // ... calcule lungi sau operații } print("Sarcină finalizată") } func cancelTask() { isCancelled = true } // Exemplu de utilizare // performSynchronousTask() // Apel sincron // cancelTask() // Apel din alt fir pentru anulare -
Utilizarea
try? Task.checkCancellation()într-un context asincron: Dacă sarcina sincronă se execută în interiorul unuiTaskîn context asincron de Swift Concurrency, puteți apela periodictry? Task.checkCancellation(). În cazul anulării, această apel va arunca oCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Verificare de anulare // Executarea unei părți din muncă // ... } } // Exemplu de utilizare în context asincron /* let task = Task { do { try performCancellableSynchronousWork() print("Sarcină finalizată") } catch is CancellationError { print("Sarcină anulată") } catch { print("A apărut o eroare: \(error)") } } // Pentru anularea sarcinii // task.cancel() */