Junior — Middle
Kaip galima nutraukti asinchroninės operacijos vykdymą?
sobes.tech AI
Atsakymas iš AI
iOS dažniausiai naudojami šie būdai asinchroninei operacijai nutraukti:
-
URLSession užduoties atšaukimas — jei asinchroninė operacija yra susijusi su tinklo užklausa, galima iškviesti
cancel()metodąURLSessionTaskobjekte. -
Naudojant
DispatchWorkItem— dirbant su GCD, galima sukurtiDispatchWorkItemir iškviesticancel(), kad bandytumėte nutraukti vykdymą. -
Combine ir Swift Concurrency —
Combinegalima atšaukti prenumeratą (AnyCancellable), o Swift Concurrency (async/await) — naudotiTaskir iškviesticancel().
Pavyzdys su Task Swift Concurrency:
let task = Task {
for i in 1...10 {
try Task.checkCancellation() // Atšaukimo patikrinimas
print(i)
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
// Vėliau, norint atšaukti:
task.cancel()
Svarbu, kad asinchroninėje operacijoje būtų įgyvendintas atšaukimo patikrinimas, kitaip operacija tęsis toliau.