Je développe une application Silverlight qui effectue plusieurs requêtes asynchrones vers un certain nombre de services Web. Je veux qu'une boîte de dialogue "chargement" modale reste active jusqu'à ce que toutes les demandes soient terminées. Je gère la situation en utilisant une variable de compteur qui s'incrémente à chaque événement de démarrage de demande asynchrone, et décrémente chaque événement asynchrone complet (cela ne semble pas sûr pour moi). Lorsque le compteur est zéro, une propriété liée à l'interface utilisateur désactive la boîte de dialogue. Y a-t-il une meilleure façon/plus générale de traiter ce problème que ma contre-solution?Synchronisation de plusieurs requêtes asynchrones
Répondre
Votre solution de compteur est valide. Quoi que vous fassiez, vous devrez garder une trace de toutes vos demandes et comprendre quand elles arrivent (lorsque le compte atteint zéro).
Vous pouvez faire différentes choses pour nettoyer votre code comme mettre toute cette implémentation dans une classe MultiAsyncWaiter qui renvoie un événement une fois terminé. Mais l'implantation fondamentale restera la même: gardez la trace jusqu'à ce qu'ils reviennent tous.
Vous avez raison au sujet de la sécurité de l'int. Si vous utilisez des opérations imbriquées (voir les commentaires) ou verrouillez la variable, vous pouvez conserver votre thread d'implémentation en toute sécurité.
Pourquoi le mot clé volatile ne fonctionne pas: Avec plusieurs threads modifiant la variable, une opération de verrouillage est nécessaire pour la décrémentation, qui est techniquement une opération de lecture et d'écriture. C'est parce qu'un autre thread peut changer la valeur entre la lecture et l'écriture.
- 1. Recherche de recette: Plusieurs requêtes Ajax asynchrones en JavaScript
- 2. Requêtes HTTP asynchrones en PHP
- 3. Faire des requêtes asynchrones synchrones
- 4. Requêtes HTTP Asynchrones Blackberry - Comment?
- 5. Requêtes GET inter-domaines asynchrones
- 6. Ignorer les anciennes requêtes ajax asynchrones multiples
- 7. Les requêtes <image> sont-elles des requêtes asynchrones?
- 8. Comment filtrer les requêtes asynchrones dans ProgressListener?
- 9. Tentative de synchronisation des requêtes AJAX
- 10. Can cpp_netlib peut-il effectuer des requêtes simultanées asynchrones?
- 11. Rx: regroupement de plusieurs requêtes Web IObservable
- 12. Requêtes asynchrones dans une application Web, à l'aide de NHibernate
- 13. Comment empêcher la mise en cache de requêtes asynchrones?
- 14. Les requêtes de modèle Django asynchrones sont-elles possibles?
- 15. Plusieurs requêtes
- 16. L2E plusieurs à plusieurs requêtes
- 17. mysql plusieurs à plusieurs requêtes
- 18. Plusieurs appels asynchrones pour remplir un objet
- 19. Objet XMLHTTPRequest unique pour effectuer plusieurs requêtes
- 20. Plusieurs à plusieurs requêtes de table
- 21. Filtrage des requêtes OData asynchrones sur Windows Phone 7
- 22. Besoin d'un exemple montrant comment faire des requêtes HTTP asynchrones
- 23. Synchronisation de problèmes avec plusieurs flvs
- 24. Effectuer des requêtes de synchronisation en utilisant $ .ajax
- 25. Optimisation de plusieurs requêtes MySQL
- 26. regroupement de plusieurs requêtes Mysql
- 27. une à plusieurs requêtes
- 28. beaucoup à plusieurs requêtes
- 29. plusieurs requêtes Execute
- 30. javascript regex plusieurs requêtes
Il ne suffit pas de rendre l'int volatile - vous devez utiliser Interlocked.Increment et .Decrement pour vous assurer de ne pas perdre les mises à jour (http://msdn.microsoft.com/fr-fr/library/dd78zt0c .aspx) –
merci, mise à jour de la réponse. – santosc
Merci pour la réponse; J'ai découvert le framework Rx livré avec Silverlight et utilisé la méthode ForkJoin() sur l'interface IObservable pour cela (ce qui est assez étonnant, allez voir http://www.minddriven.de/?p=563&cpage= 1 # commentaire-4425) – gn22