Sobes.tech
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:

  1. URLSession užduoties atšaukimas — jei asinchroninė operacija yra susijusi su tinklo užklausa, galima iškviesti cancel() metodą URLSessionTask objekte.

  2. Naudojant DispatchWorkItem — dirbant su GCD, galima sukurti DispatchWorkItem ir iškviesti cancel(), kad bandytumėte nutraukti vykdymą.

  3. Combine ir Swift ConcurrencyCombine galima atšaukti prenumeratą (AnyCancellable), o Swift Concurrency (async/await) — naudoti Task ir iškviesti cancel().

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.