【发布时间】:2014-02-01 08:24:02
【问题描述】:
我的 MVC 应用程序使用一个库,并且该库的一些方法在内部调用 WCF 服务。从此 DLL 公开的所有方法都是同步的(它们都不返回 Task 或 Task),并且由于我们不拥有该程序集,因此无法将它们转换为 Async API。
但是,由于这些方法调用 WCF 服务,它们是网络绑定的(因此理想情况下它们应该是异步的)。
我想在我的 MVC 应用程序中使用异步控制器操作以使其更具可扩展性。我的问题是当一种方法本质上是同步的时,如何使整个方法管道可以等待。
异步操作 --> 等待异步方法 --> 等待异步方法 2 --> 从库中同步方法?
我应该使用 TaskCompletionSource 还是 Task.FromResult 来包装库方法调用?
另外,如果我使用上述方法,我的代码会比同步版本更具可扩展性吗?
【问题讨论】:
-
在异步中包装同步方法对可扩展性没有任何帮助。它只是将执行移到另一个线程上。如果该线程有重要的事情要做(如 UI 线程),这可能会提高响应能力。参见 Steven Toub 的帖子:blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx
标签: c# asp.net-mvc asynchronous async-await