Junior — Middle
Comment peut-on utiliser DispatchGroup pour exécuter des requêtes de manière séquentielle avec la possibilité d'interrompre à la troisième sans attendre la quatrième?
sobes.tech IA
Réponse de l'IA
Le DispatchGroup sur iOS est généralement utilisé pour suivre la fin de plusieurs tâches asynchrones. Cependant, pour exécuter des requêtes de manière séquentielle avec la possibilité d’interrompre à la troisième requête sans attendre la quatrième, on peut utiliser l’approche suivante :
- Ne pas lancer toutes les requêtes en même temps, mais les lancer séquentiellement, en attendant la fin de la précédente.
- Pour chaque requête, utiliser DispatchGroup pour suivre sa fin.
- Lorsqu’une condition d’interruption survient (par exemple, une erreur à la troisième requête), ne pas lancer la suivante et sortir de la chaîne.
Exemple en 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 }
// Si nécessaire, lancer la quatrième requête
// performRequest4 { ... }
}
}
}
}
func performRequest1(completion: @escaping (Bool) -> Void) {
// Requête asynchrone
completion(true) // ou false en cas d’erreur
}
func performRequest2(completion: @escaping (Bool) -> Void) {
completion(true)
}
func performRequest3(completion: @escaping (Bool) -> Void) {
completion(false) // exemple d’interruption
}
Ainsi, si la troisième requête se termine avec une erreur (false), la quatrième ne sera pas lancée. DispatchGroup aide à suivre la fin de chaque requête, mais la séquence est contrôlée par des appels imbriqués.