针对非异步服务的异步编程

时间:2013-02-18 14:58:11

标签: c# asp.net asynchronous threadpool

去年,我们一直在开发一个新的网络应用程序,该应用程序可以调用我们公司现有的服务层。

我们决定将所有面向服务的呼叫结合到我们自己的服务层(我将其称为我们的Web服务层),以便我们使用哪些服务的详细信息(我们&#39 ; ll将来某个时候移动到一个新的API)从web层本身隐藏。

我们还决定大多数Web服务层方法都会返回Task<T>

目前,我们调用的基础服务并非异步,因此我们的Web服务层会在可用线程最大化时出现问题,并在我们拥有大量用户时导致问题。

我正在以某种方式寻找信息,以进一步了解我们返回Task<T>的决定将如何影响我们的网站,以及我们是否需要考虑更改我们的退货类型。

我们将在某个时候转移到VS2012,但现在我们正在使用VS2010并且没有使用asyncawait

1 个答案:

答案 0 :(得分:1)

  

按照目前的情况,我们调用的底层服务不是异步的   所以有一些担心我们的网络服务层将最大化   可用的线程,当我们有大量的线程时会导致问题   用户。

是的,这是你应该关注的事情。我建议你只有拥有真正的异步方法才能这样做。但是简单地将阻塞同步方法包装到异步API中比直接从使用代码调用同步方法更糟糕。在ASP.NET应用程序中,只有当底层API依赖于I / O完成端口时,您才能从异步调用中受益。否则,这只是浪费资源。

您可以这样做的唯一有用方案是,您的方法可以并行调用而不是顺序调用。这是可能的,因为它们之间没有连接不同的方法。在这种情况下,您确实可以将同步方法包装在异步任务中。