2010-10-09 5 views
0

J'ai une application Silverlight 4 utilisant des services RIA. L'une des méthodes de service RIA fait quelque chose semblable à ce qui suit:Effectuer des appels asynchrones dans une méthode de services RIA

List<Foo> fooList = this.GetListOfFoo(); 
AnotherService aService = new AnotherService(); 
foreach (Foo foo in fooList) 
{ 
    aService.SomeMethodCompleted += this.methodCompleted; 
    aService.SomeMethodAsync(foo); 
} 

return fooList; 

SomeMethodAsync fait alors des modifications à foo, qui est un type de référence.

this.methodCompleted est appelée pour chaque Foo, mais les mises à jour des instances de Foo ne sont pas vus par le client Silverlight. Je suppose que rien n'attend automatiquement que tous les appels asynchrones se terminent avant que le service RIA ne retourne au client Silverlight.

Ma question est: puis-je coordonner l'achèvement des appels async avant de retourner au client Silverlight? Ou suis-je limité à faire uniquement des appels synchrones dans un service RIA?

Répondre

0

La réponse est: faites comme vous le feriez pour n'importe quelle méthode WCF ou service web. C'est-à-dire, un tableau de WaitHandles que chaque appel aux ensembles methodCompleted, et WaitAll juste avant de retourner. Ou un CountDownEvent si vous effectuez> 64 appels asynchrones, comme je devrais le faire.

Et ne pas câbler le gestionnaire d'événements Terminé à l'intérieur du foreach. Sinon, vous appelez votre gestionnaire Terminé (fooList.Count)^2 fois, ce qui perturbe votre CountDownEvent :)

Questions connexes