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:
- Nezačínajte všetky požiadavky naraz, ale vykonávajte ich postupne, čakajúc na dokončenie predchádzajúcej.
- Pre každú požiadavku použite DispatchGroup na sledovanie jej dokončenia.
- 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.