Middle
Ako zrušiť vykonávanie synchronizovaných úloh v iOS?
sobes.tech AI
Odpoveď od AI
Priame zrušenie synchronných úloh (ktoré blokujú aktuálny vlákno) bez prerušenia vykonávania vlákna nie je možné.
Na simuláciu zrušenia synchronnej úlohy môžete použiť nasledujúce prístupy:
-
Pravidelná kontrola vlajky zrušenia: Pridajte do logiky synchronnej úlohy kontrolu booleovskej vlajky, ktorá je nastavená zvonku, keď je potrebné zrušiť. Ak je vlajka nastavená, úloha sa predčasne ukončí.
var isCancelled = false func performSynchronousTask() { // Začiatok úlohy for i in 0..<100000 { if isCancelled { print("Úloha zrušená") return // Predčasný odchod } // Vykonanie časti práce // ... dlhé výpočty alebo operácie } print("Úloha dokončená") } func cancelTask() { isCancelled = true } // Príklad použitia // performSynchronousTask() // Synchronná volanie // cancelTask() // Zavolať z iného vlákna na zrušenie -
Použitie
try? Task.checkCancellation()v asynchrónnom kontexte: Ak sa synchronná úloha vykonáva v rámciTaskv asynchrónnom kontexte Swift Concurrency, môžete ju periodicky volať. V prípade zrušenia tento volanie vyhodíCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Kontrola zrušenia // Vykonanie časti práce // ... } } // Príklad použitia v asynchrónnom kontexte /* let task = Task { do { try performCancellableSynchronousWork() print("Úloha dokončená") } catch is CancellationError { print("Úloha zrušená") } catch { print("Vyskytla sa chyba: \(error)") } } // Na zrušenie úlohy // task.cancel() */