Junior — Middle
Hogyan lehet a DispatchGroup-ot használni kérés-sorozatok végrehajtására, lehetőséggel a harmadik megszakítására anélkül, hogy a negyediket várnánk?
sobes.tech MI
Válasz az MI-től
Az iOS-ben a DispatchGroup általában több aszinkron feladat befejezésének nyomon követésére szolgál. Azonban, a kérés sorozatos végrehajtásához, lehetőség szerint a harmadik kérésnél való megszakítással anélkül, hogy a negyedikre várnánk, a következő megközelítést lehet alkalmazni:
- Ne indítsa el az összes kérést egyszerre, hanem egymás után hajtsa végre, várva az előző befejezését.
- Minden kéréshez használjon DispatchGroup-ot a befejezés nyomon követésére.
- Amikor egy megszakítási feltétel (pl. hiba a harmadik kérésnél) lép fel, ne indítsa el a következő kérést, és lépjen ki a láncból.
Swift példában:
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 }
// Szükség szerint indíthatja a negyedik kérést
// performRequest4 { ... }
}
}
}
}
func performRequest1(completion: @escaping (Bool) -> Void) {
// Aszinkron kérés
completion(true) // vagy false hiba esetén
}
func performRequest2(completion: @escaping (Bool) -> Void) {
completion(true)
}
func performRequest3(completion: @escaping (Bool) -> Void) {
completion(false) // példa megszakítás
}
Így, ha a harmadik kérés hibával (false) zárul, a negyedik nem fog elindulni. A DispatchGroup segít nyomon követni minden kérés befejezését, de a sorrend a beágyazott hívásokkal van ellenőrizve.