Middle
Kuidas saab iOS-is sünkrooniliste ülesannete täitmist tühistada?
sobes.tech AI
Vastus AI-lt
Pärisots sinhronsete ülesannete (mis blokeerisid praeguse voolu) tühistamine ei ole võimalik.
Sinhronse ülesande tühistamise imiteerimiseks saab kasutada järgmisi lähenemisviise:
-
Püsiv tühistamise lipu kontroll: Lisage sinhronilise ülesande loogikale booleantipp, mis määratakse väljastpoolt vajadusel tühistamiseks. Kui lipp on seatud, lõpeb ülesanne varem.
var isCancelled = false func performSynchronousTask() { // Ülesande algus for i in 0..<100000 { if isCancelled { print("Ülesanne tühistati") return // Varasem väljumine } // Töö osa täitmine // ... pikk arvutus või operatsioon } print("Ülesanne lõpetatud") } func cancelTask() { isCancelled = true } // Näide kasutamisest // performSynchronousTask() // Sünkroonne väljakutse // cancelTask() // Teisest voost tühistamiseks -
try? Task.checkCancellation()kasutamine asünkroonses kontekstis: Kui sinhronine ülesanne täidetakseTasksees Swift Concurrency-s, saab perioodiliselt kutsudatry? Task.checkCancellation(). Kui tühistamine on toimunud, viskab seeCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Tühistamise kontroll // Töö osa täitmine // ... } } // Näide kasutamisest asünkroonses kontekstis /* let task = Task { do { try performCancellableSynchronousWork() print("Ülesanne lõpetatud") } catch is CancellationError { print("Ülesanne tühistati") } catch { print("Viga: \(error)") } } // Tühista ülesanne // task.cancel() */