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:
- Ära käivita kõiki päringuid korraga, vaid täida need järjestikku, oodates eelneva lõpetamist.
- Iga päringu puhul kasuta DispatchGroupi selle lõpetamise jälgimiseks.
- 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.