Sobes.tech
Junior — Middle

Ako použiť DispatchGroup na sekvenčné vykonávanie požiadaviek s možnosťou prerušenia na treťom bez čakania na štvrtý?

sobes.tech AI

Odpoveď od AI

V iOS sa DispatchGroup zvyčajne sleduje dokončenie viacerých asynchrónnych úloh. Avšak, na sekvenčné vykonávanie požiadaviek s možnosťou prerušenia na tretej požiadavke bez čakania na štvrtú, možno použiť nasledujúci prístup:

  1. Nezačínajte všetky požiadavky naraz, ale vykonávajte ich postupne, čakajúc na dokončenie predchádzajúcej.
  2. Pre každú požiadavku použite DispatchGroup na sledovanie jej dokončenia.
  3. Keď nastane podmienka prerušenia (napríklad chyba na tretej požiadavke), nespúšťajte ďalšiu a opustite reťazec.

Príklad v Swift:

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 }

                // Ak je potrebné, môžete spustiť štvrtú požiadavku
                // performRequest4 { ... }
            }
        }
    }
}

func performRequest1(completion: @escaping (Bool) -> Void) {
    // Asynchrónna požiadavka
    completion(true) // alebo false pri chybe
}

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

func performRequest3(completion: @escaping (Bool) -> Void) {
    completion(false) // príklad prerušenia
}

Takto, ak tretia požiadavka skončí s chybou (false), štvrtá nebude spustená. DispatchGroup pomáha sledovať dokončenie každej požiadavky, ale sekvencia je riadená vnorenými volaniami.