Middle
Kaip galima atšaukti sinchroninių užduočių vykdymą iOS?
sobes.tech AI
Atsakymas iš AI
Tiesioginio atšaukimo sinchroninėms užduotims (užblokavusioms dabartinį srautą) nėra.
Norint imituoti sinchroninės užduoties atšaukimą, galima naudoti šiuos metodus:
-
Nuolatinė atšaukimo ženklo patikra: Sinchroninės užduoties logikoje pridėkite boolean žymeklį, kuris nustatomas iš išorės, jei reikia atšaukti. Jei žymeklis nustatytas, užduotis baigsis anksčiau.
var isCancelled = false func performSynchronousTask() { // Užduoties pradžia for i in 0..<100000 { if isCancelled { print("Užduotis atšaukta") return // Anksčiau išėjimas } // Darbo dalies vykdymas // ... ilgas skaičiavimas ar operacija } print("Užduotis baigta") } func cancelTask() { isCancelled = true } // Pavyzdys naudojimo // performSynchronousTask() // Sinchroninis iškvietimas // cancelTask() // Iš kitos srovės atšaukti -
Naudojant
try? Task.checkCancellation()asinchroniniame kontekste: Jei sinchroninė užduotis vykstaTaskviduje Swift Concurrency, galima periodiškai iškviestitry? Task.checkCancellation(). Jei atšaukta, šis iškvietimas išmesCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Atšaukimo patikra // Darbo dalies vykdymas // ... } } // Pavyzdys naudojimo asinchroniniame kontekste /* let task = Task { do { try performCancellableSynchronousWork() print("Užduotis baigta") } catch is CancellationError { print("Užduotis atšaukta") } catch { print("Klaida: \(error)") } } // Atšaukti užduotį // task.cancel() */