Sobes.tech
Junior — Middle

Kuidas kasutada DispatchGroupi, et järjestikuseid päringuid teha võimalusega katkestada kolmandal ilma oodata neljandat?

sobes.tech AI

Vastus AI-lt

iOS-is kasutatakse tavaliselt DispatchGroupi mitme asünkroonse ülesande lõpetamise jälgimiseks. Kuid järjestikuste päringute täitmiseks, kus kolmanda päringu katkestamine on võimalik ilma neljanda ootamata, saab kasutada järgmist lähenemist:

  1. Ära käivita kõiki päringuid korraga, vaid täida need järjestikku, oodates eelneva lõpetamist.
  2. Iga päringu puhul kasuta DispatchGroupi selle lõpetamise jälgimiseks.
  3. Kui tekib katkestamise tingimus (näiteks viga kolmandas päringus), ära käivita järgmist päringut ja väljuda ahelast.

Swift näide:

let dispatchGroup = DispatchGroup()

func performRequestsSequentially() {
    dispatchGroup.enter()
    performRequest1 { success in
        dispatchGroup.leave()
        guard success else { return }

        dispatchGroup.enter()
        performRequest2 { success in
            dispatchGroup.leave()
            guard success else { return }

            dispatchGroup.enter()
            performRequest3 { success in
                dispatchGroup.leave()
                guard success else { return }

                // Kui vaja, võib alustada neljanda päringuga
                // performRequest4 { ... }
            }
        }
    }
}

func performRequest1(completion: @escaping (Bool) -> Void) {
    // Asünkroonne päring
    completion(true) // või false vea korral
}

func performRequest2(completion: @escaping (Bool) -> Void) {
    completion(true)
}

func performRequest3(completion: @escaping (Bool) -> Void) {
    completion(false) // näide katkestusest
}

Seega, kui kolmas päring lõpeb veaga (false), neljas päring ei käivitu. DispatchGroup aitab jälgida iga päringu lõpetamist, kuid järjestus on kontrollitud sisemiste väljakutsete kaudu.