Junior — Middle
Jak lze použít DispatchGroup pro sekvenční provádění požadavků s možností přerušení na třetím bez čekání na čtvrtý?
sobes.tech AI
Odpověď od AI
V iOS je DispatchGroup obvykle používán ke sledování dokončení několika asynchronních úkolů. Nicméně, pro sekvenční provádění požadavků s možností přerušení na třetím požadavku bez čekání na čtvrtý, lze použít následující přístup:
- Nezahajujte všechny požadavky najednou, ale provádějte je postupně, čekajíc na dokončení předchozího.
- Pro každý požadavek použijte DispatchGroup k sledování jeho dokončení.
- Pokud nastane podmínka přerušení (například chyba na třetím požadavku), nespouštějte další požadavek a opusťte řetězec.
Pří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 }
// Pokud je potřeba, můžete spustit čtvrtý požadavek
// performRequest4 { ... }
}
}
}
}
func performRequest1(completion: @escaping (Bool) -> Void) {
// Asynchronní požadavek
completion(true) // nebo false při chybě
}
func performRequest2(completion: @escaping (Bool) -> Void) {
completion(true)
}
func performRequest3(completion: @escaping (Bool) -> Void) {
completion(false) // příklad přerušení
}
Tímto způsobem, pokud třetí požadavek skončí chybou (false), čtvrtý nebude spuštěn. DispatchGroup pomáhá sledovat dokončení každého požadavku, ale sekvence je řízena vnořenými voláními.