【问题标题】:How to tell if a set of web service calls are completed?如何判断一组 Web 服务调用是否完成?
【发布时间】:2012-02-08 14:37:47
【问题描述】:

我正在使用 silverlight 并正在调用一组soap web 服务调用,并希望在我知道所有操作都已完成后执行操作。

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

【问题讨论】:

    标签: c# .net wpf silverlight web-services


    【解决方案1】:

    每次调用都会向客户端返回一个事件,表明它已完成。一个简单且基本的方法是为每次调用增加一个包变量,然后当值达到 10 时,您就知道所有调用都已完成。

    更强大的机制是在每次请求之前增加调用次数,然后在请求完成时减少调用次数。当计数器归零时,您就知道所有请求都已完成。

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

    【讨论】:

    • 触发完成事件时。所有函数调用都在同一个线程上吗?另外,有没有一种方法可以在整数达到 10 时触发事件,或者如果整数为 10,我应该在完成调用的末尾添加一个 if 以调用另一个函数?
    • @Justin - 线程安全地满足计数递增和递减之间的交互。最简单的解决方案是检查何时count == 0(如果您使用基本方法,则为 10)并调用您的最终函数。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2010-10-19
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多