去年,我们一直在开发一个新的网络应用程序,该应用程序可以调用我们公司现有的服务层。
我们决定将所有面向服务的呼叫结合到我们自己的服务层(我将其称为我们的Web服务层),以便我们使用哪些服务的详细信息(我们&#39 ; ll将来某个时候移动到一个新的API)从web层本身隐藏。
我们还决定大多数Web服务层方法都会返回Task<T>
。
目前,我们调用的基础服务并非异步,因此我们的Web服务层会在可用线程最大化时出现问题,并在我们拥有大量用户时导致问题。
我正在以某种方式寻找信息,以进一步了解我们返回Task<T>
的决定将如何影响我们的网站,以及我们是否需要考虑更改我们的退货类型。
我们将在某个时候转移到VS2012,但现在我们正在使用VS2010并且没有使用async
和await
。
答案 0 :(得分:1)
按照目前的情况,我们调用的底层服务不是异步的 所以有一些担心我们的网络服务层将最大化 可用的线程,当我们有大量的线程时会导致问题 用户。
是的,这是你应该关注的事情。我建议你只有拥有真正的异步方法才能这样做。但是简单地将阻塞同步方法包装到异步API中比直接从使用代码调用同步方法更糟糕。在ASP.NET应用程序中,只有当底层API依赖于I / O完成端口时,您才能从异步调用中受益。否则,这只是浪费资源。
您可以这样做的唯一有用方案是,您的方法可以并行调用而不是顺序调用。这是可能的,因为它们之间没有连接不同的方法。在这种情况下,您确实可以将同步方法包装在异步任务中。