Middle
Kā var atcelt sinhronizēto uzdevumu izpildi iOS?
sobes.tech AI
Atbilde no AI
Tiešas sinhronisku uzdevumu (kas bloķēja pašreizējo plūsmu) atcelšana nav iespējama.
Lai imitētu sinhroniskas uzdevuma atcelšanu, var izmantot šādus pieejas:
-
Pastāvīga atcelšanas zīmes pārbaude: Sinhroniskās uzdevuma loģikā pievienojiet booleāna zīmi, kas tiek iestatīta no ārpuses, ja nepieciešams atcelt. Ja zīme ir iestatīta, uzdevums tiek pārtraukts agrāk.
var isCancelled = false func performSynchronousTask() { // Uzdevuma sākums for i in 0..<100000 { if isCancelled { print("Uzdevums atcelts") return // Agrāka iziešana } // Darba daļas izpilde // ... ilgs aprēķins vai operācija } print("Uzdevums pabeigts") } func cancelTask() { isCancelled = true } // Piemērs lietošanai // performSynchronousTask() // Sinhroniskais izsaukums // cancelTask() // Izsaukt no citas plūsmas atcelšanai -
try? Task.checkCancellation()izmantošana asinhroniskajā kontekstā: Ja sinhroniskais uzdevums tiek veiktsTaskiekšienē Swift Concurrency, var periodiski izsaukttry? Task.checkCancellation(). Ja ir atcelšana, šis izsaukums izmetīsCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Atcelšanas pārbaude // Darba daļas izpilde // ... } } // Lietošana asinhroniskajā kontekstā /* let task = Task { do { try performCancellableSynchronousWork() print("Uzdevums pabeigts") } catch is CancellationError { print("Uzdevums atcelts") } catch { print("Kļūda: \(error)") } } // Atcelt uzdevumu // task.cancel() */