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

  1. 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.
  2. Minden kéréshez használjon DispatchGroup-ot a befejezés nyomon követésére.
  3. 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.