2013-02-18 45 views
2

过去一年中,我们一直致力于开发一种新的Web应用程序,该应用程序调用我们公司现有的服务层。针对非异步服务的异步编程

我们做的收官我们所有的面向服务的电话到我们自己的服务层(我将称之为我们的Web服务层),因此我们使用的服务的细节(我们将移动的决定到将来的某个时候使用新的API)对Web层本身是隐藏的。

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

因为它的立场,即我们所说的基本服务不异步,因此也有一些担心,我们的网络服务层将最大程度的发挥可用线程并导致问题的时候,我们有一个大的用户量。

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

我们将在某些时候转向VS2012,但现在我们使用的是VS2010,并未使用asyncawait

回答

1

因为它的立场,即我们所说的基本服务不异步和 所以有一定的担心,我们的网络服务层将最大程度的发挥 可用线程,导致问题的时候,我们有大量的 用户。

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

中,你能做到这一点的唯一有用的情况是,如果你的方法可以并行而不是按顺序被调用。这是唯一可能的是不同的方法之间没有连接。在这种情况下,你确实可以将你的同步方法包装在异步任务中。

+0

我们确实并行调用了所有的Web服务层方法(使用Task.WaitAll)。 – 2013-02-18 15:18:39

+0

好的,在这种情况下,可以有这样做的理由,正如我在我的回答中提到的那样。 – 2013-02-18 15:20:26