Выполнение асинхронных вызовов в методе служб RIA - PullRequest
0 голосов
/ 09 октября 2010

У меня есть приложение Silverlight 4, использующее службы RIA. Один из методов обслуживания 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 затем вносит изменения в foo, который является ссылочным типом.

this.methodCompleted вызывается для каждого Foo, но обновления экземпляров Foo не видны клиенту Silverlight. Я предполагаю, что ничто не будет автоматически ожидать завершения всех асинхронных вызовов, прежде чем служба RIA вернется к клиенту Silverlight.

Мой вопрос: могу ли я координировать завершение асинхронных вызовов перед возвратом к клиенту Silverlight? Или я ограничен только синхронными вызовами в службе RIA?

1 Ответ

0 голосов
/ 12 октября 2010

Ответ таков: сделайте это так же, как для любого метода WCF или веб-службы. То есть, массив WaitHandles, который каждый вызов метода methodCompleted устанавливает, и WaitAll непосредственно перед возвратом. Или CountDownEvent, если вы делаете> 64 асинхронных вызовов, как мне может понадобиться.

И не подключайте обработчик событий Completed ВНУТРИ foreach. В противном случае вы вызовете обработчик Completed (fooList.Count) ^ 2 раза, что мешает вашему CountDownEvent:)

...