2012-02-08 83 views
0

我正在使用silverlight,并且正在调用一组soap soap服务调用,并且希望在知道所有操作完成后执行操作。如何判断一组Web服务调用是否完成?

所以,我有3个不同的电话。我在循环中每次进行10次异步调用并等待它们返回。我怎么知道什么时候完成了一组?从我使用线程开始已经很长时间了。

回答

1

每次通话都会向客户端返回一个事件,表示已完成。一个简单而基本的方法就是为每个呼叫增加一个包变量,然后当这个值为10时,你知道所有的呼叫都完成了。

更强大的机制将增加每个请求前的调用次数,然后在请求完成时递减调用次数。当计数器返回到零时,您知道所有请求都已完成。

需要注意确保对这个变量的访问是线程安全的。

+0

当完成的事件被激发。所有的函数调用都在同一个线程上吗?另外,是否有一种方法可以在整数达到10时触发事件,或者如果整数为10时应该在完成的调用的末尾放置if以调用另一个函数? – Justin 2012-02-08 14:46:53

+0

@Justin - 线程的安全是迎合增加和减少计数之间的交互。最简单的解决方案就是检查'count == 0'(或者如果你已经使用了基本方法),并调用你的最终功能。 – ChrisF 2012-02-08 14:50:59

0

您可以使用BackgroundWorker启动所有Web服务调用并传入WaitHandle(如ManualResetEvent),并创建一个这样的数组。然后使用WaitHandle.WaitAll方法。在每次回调中,您将设置WaitHandle。然后在后台工作器中它会阻塞(因为WaitAll),直到所有的等待手柄都被设置。

相关问题