在 Silverlight 应用程序中,我需要并行运行多个异步调用 - 它们将调用服务器来检查数据等。我的伪代码设置如下所示
public interface IAsyncVerifier
{
event EventHandler OnCompleted;
void Verify();
}
// Subscribe to verifier completion events
foreach (var verifier in this.VerifierEngine.GetVerifiers())
{
var asyncVerifier = verifier as IAsyncVerifier;
if (asyncVerifier == null || !asyncVerifier.IsVerifierRunning()) continue;
asyncVerifier.OnCompleted += (s, a) => DoWhat(); // ????????
asyncVerifier.Verify();
}
所以,在我看来,我有所有这些任务通用的界面。然后在执行之前我订阅了他们所有的事件和......?
我需要以某种方式等待他们完成并继续我正在做的事情。如何正确编写剩余代码?我看到某种counter
我每次调用时都会增加Verify()
并每次收到时都会减少的东西OnCompleted
。但我没有完全了解如何将它包裹在一起,这样它就不会闻起来。此外,如果我理解正确,Silverlight 会在后台线程上运行它们(调用 WCF 服务)
编辑:
我正在使用 3rd 方验证引擎。this.Verifier.VerifierEngine
不是我写的。我只能将验证器添加到集合中。通常它们在主线程上执行以验证属性等。我需要创建一个验证器来回调服务器,因此async
在 Silverlight 中。我不是手动处理线程,当我调用服务时,它会在主线程上返回,所以很好,这部分对我隐藏。我想要的只是能够“等待”直到所有验证者都完成。我现在唯一可以检查的方法就是我正在做的事情。
因此我的用户界面很古怪。完成修改字段后,用户点击“保存”,我的验证开始。我检查是否所有验证者IsVerifierRunning
并给用户他需要重试的消息。我真的需要能够等待所有人完成然后继续。
- 我不需要担心线程,除非适当的解决方案涉及使用线程
- 我已经可以访问结果