Silverlight 多异步请求同步

Silverlight 多异步请求同步,silverlight,asynchronous,Silverlight,Asynchronous,我正在开发一个Silverlight应用程序,它可以向许多web服务发出多个异步请求。我希望一个模式“加载”对话框保持活动状态,直到所有请求完成。我通过使用一个计数器变量来管理这种情况,该计数器变量在每个异步请求开始事件上递增,在每个异步完成事件上递减(在我看来不是线程安全的)。当计数器为零时,绑定到UI的属性将关闭对话框。有没有比我的反解更好/更通用的方法来处理这个问题?你的反解是有效的。无论您做什么,您都必须跟踪所有请求,并了解它们何时到达(当计数为零时) 您可以做不同的事情来清理代码,比如

我正在开发一个Silverlight应用程序,它可以向许多web服务发出多个异步请求。我希望一个模式“加载”对话框保持活动状态,直到所有请求完成。我通过使用一个计数器变量来管理这种情况,该计数器变量在每个异步请求开始事件上递增,在每个异步完成事件上递减(在我看来不是线程安全的)。当计数器为零时,绑定到UI的属性将关闭对话框。有没有比我的反解更好/更通用的方法来处理这个问题?

你的反解是有效的。无论您做什么,您都必须跟踪所有请求,并了解它们何时到达(当计数为零时)

您可以做不同的事情来清理代码,比如将所有实现放在某个MultiAsyncWater类中,该类在完成时返回一个事件。但基本的实施方式将保持不变:跟踪它们,直到它们全部返回

关于int的线程不安全性,您是对的。如果您对变量使用联锁操作(请参阅注释)或锁定,则可以保持实现线程安全


为什么volatile关键字不起作用:当多个线程更改变量时,减量需要一个联锁操作,从技术上讲,这是一个读写操作。这是因为另一个线程可以更改读取和写入之间的值。

这不足以使int不稳定-您需要使用Interlocked.Increment和.decreation以确保不会丢失更新()感谢您的回答;我发现了带有Silverlight的Rx框架,并为此在IObservable接口上使用了ForkJoin()方法(这是非常惊人的东西,请查看)