【发布时间】:2012-02-08 14:37:47
【问题描述】:
我正在使用 silverlight 并正在调用一组soap web 服务调用,并希望在我知道所有操作都已完成后执行操作。
所以,我有 3 个不同的电话。我在一个循环中进行每个异步调用 10 次并等待它们返回。我怎么知道 10 组中的一个何时完成?我已经很久没有使用线程了。
【问题讨论】:
标签: c# .net wpf silverlight web-services
我正在使用 silverlight 并正在调用一组soap web 服务调用,并希望在我知道所有操作都已完成后执行操作。
所以,我有 3 个不同的电话。我在一个循环中进行每个异步调用 10 次并等待它们返回。我怎么知道 10 组中的一个何时完成?我已经很久没有使用线程了。
【问题讨论】:
标签: c# .net wpf silverlight web-services
每次调用都会向客户端返回一个事件,表明它已完成。一个简单且基本的方法是为每次调用增加一个包变量,然后当值达到 10 时,您就知道所有调用都已完成。
更强大的机制是在每次请求之前增加调用次数,然后在请求完成时减少调用次数。当计数器归零时,您就知道所有请求都已完成。
这里需要注意确保对该变量的访问是线程安全的。
【讨论】:
count == 0(如果您使用基本方法,则为 10)并调用您的最终函数。
您可以使用BackgroundWorker 启动所有Web 服务调用并传入WaitHandle(例如ManualResetEvent)并创建一个数组。然后使用WaitHandle.WaitAll 方法。在每个回调中,您将设置 WaitHandle。然后在后台工作人员中,它将阻塞(因为 WaitAll),直到设置了所有等待句柄。
【讨论】: