我有一个使用RIA服务的Silverlight 4应用程序。其中一种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进行更改,这是一种引用类型。
为每个Foo调用this.methodCompleted,但Silverlight客户端看不到对Foo实例的更新。我猜测在RIA服务返回Silverlight客户端之前,没有任何内容会自动等待所有异步调用完成。
我的问题是:在返回Silverlight客户端之前,我可以协调完成异步调用吗?或者我是否仅限于在RIA服务中进行同步呼叫?
答案 0 :(得分:0)
答案是:按照您对任何WCF或Web服务方法的方式进行操作。也就是说,每个调用methodCompleted的WaitHandles数组都会在返回之前调用WaitAll。或者,如果您正在进行&gt; 64次异步调用,请使用CountDownEvent,就像我可能需要的那样。
并且不要将完成的事件处理程序连接到foreach中。否则你将调用你的Completed处理程序(fooList.Count)^ 2次,这与你的CountDownEvent混淆:)