在过去的一年里,我们一直在开发一个调用我们公司现有服务层的新网络应用程序。
我们决定将所有面向服务的调用打包到我们自己的服务层(我将其称为我们的网络服务层),以便我们使用哪些服务的详细信息(我们将移至一个新的 API 在未来的某个时候)对网络层本身是隐藏的。
我们还决定我们的大多数 Web 服务层方法将返回 Task<T>
.
就目前而言,我们调用的底层服务不是异步的,因此有人担心我们的网络服务层会最大化可用线程并在我们拥有大量用户时导致问题。
我正在以某种方式寻找信息,以进一步了解我们如何决定返回 Task<T>
将影响我们的网站以及我们是否需要考虑更改返回类型。
我们将在某个时候转移到 VS2012,但现在我们使用的是 VS2010 而没有使用 async
和 await
.
最佳答案
As it stands, the underlying services that we call are not async and so there are some concerns that our web-service layer will max out the available threads and cause problems when we have a large volume of users.
是的,这是您应该关心的事情。我建议您仅在拥有真正的异步方法时才这样做。但是简单地将阻塞同步方法包装到异步 API 中会比直接从使用代码调用同步方法更糟糕。在 ASP.NET 应用程序中,只有当底层 API 依赖于 I/O 完成端口时,您才能从异步调用中获益。否则只是浪费资源。
您可以这样做的唯一有用场景是您的方法可以并行调用而不是顺序调用。只有在不同的方法之间没有连接时才有可能。在这种情况下,您确实可以将同步方法包装在异步任务中。
关于c# - 针对非异步服务的异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939164/