【发布时间】:2011-07-26 11:42:24
【问题描述】:
Silverlight 一次只能同时发送一定数量的 WCF 请求。我正在尝试序列化我的应用程序的特定部分正在执行的请求,因为我不需要它们同时运行。
问题如下(总结如下): “Silverlight 应用程序中的 WCF 代理使用启动 Web 服务调用的线程的 SynchronizationContext 来安排在收到响应时调用异步事件处理程序。当从 Silverlight 应用程序的 UI 线程启动 Web 服务调用时,异步事件处理程序代码也将在 UI 线程上执行。” http://tomasz.janczuk.org/2009/08/improving-performance-of-concurrent-wcf.html
总结:基本上,如果你阻塞了调用异步方法的线程,它就永远不会被调用。
我无法找出正确的线程模型,这样才能以合理的方式给我想要的东西。
我唯一的其他要求是我不希望 UI 线程阻塞。
据我所知,应该工作的是,如果 UI 线程有一个工作线程,它将调用作为Action 委托排队,然后使用AutoResetEvent 执行任务在另一个工作线程中一次一个。有两个问题:
1)调用 async 的线程不能阻塞,因为那样 async 永远不会被调用。实际上,如果您将该线程放入等待循环中,我注意到它也不会被调用
2)您需要一种方法来从异步调用的完成方法发出信号,表明它已完成。
抱歉,拖了这么久,感谢阅读。有什么想法吗?
【问题讨论】:
-
Silverlight 5 显然具有更好的服务调用线程性能,因此您可能正在为不再存在的问题创建解决方法。
-
真的吗?我没听说过,但很高兴知道。不幸的是,要切换到 SL 5 还需要一段时间。
-
顺便问一下,您是否有链接或知道您从何处获得此信息?我想看看你在说什么,但找不到。
标签: multithreading silverlight wcf asynchronous