Sobes.tech
Junior — Middle

Kako koristiti DispatchGroup za sekvencijalno izvršavanje zahteva sa mogućnošću prekida na trećem bez čekanja na četvrti?

sobes.tech АИ

Одговор од АИ

U iOS-u, DispatchGroup se obično koristi za praćenje završetka više asinhronih zadataka. Međutim, za izvršavanje zahteva sekvencijalno sa mogućnošću prekida na trećem zahtevu bez čekanja na četvrti, može se koristiti sledeći pristup:

  1. Ne pokrećite sve zahteve istovremeno, već ih izvršavajte redom, čekajući da se prethodni završi.
  2. Za svaki zahtev koristite DispatchGroup za praćenje njegovog završetka.
  3. Kada se pojavi uslov prekida (npr. greška na trećem zahtevu), nemojte pokrenuti sledeći i izađite iz lanca.

Primer u Swift-u:

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 }

                // Ako je potrebno, možete pokrenuti četvrti zahtev
                // performRequest4 { ... }
            }
        }
    }
}

func performRequest1(completion: @escaping (Bool) -> Void) {
    // Asinhroni zahtev
    completion(true) // ili false u slučaju greške
}

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

func performRequest3(completion: @escaping (Bool) -> Void) {
    completion(false) // primer prekida
}

Na ovaj način, ako treći zahtev završi sa greškom (false), četvrti neće biti pokrenut. DispatchGroup pomaže u praćenju završetka svakog zahteva, ali se sekvenca kontroliše putem ugnježdenih poziva.