2

在过去的一年里,我们一直在开发一个调用我们公司现有服务层的新 Web 应用程序。

我们决定将所有面向服务的调用包装到我们自己的服务层(我将其称为我们的 Web 服务层),以便我们使用哪些服务的详细信息(我们将转移到新的 API在未来的某个时候)对 Web 层本身隐藏。

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

就目前而言,我们调用的底层服务不是异步的,因此有人担心我们的 Web 服务层会最大化可用线程并在我们拥有大量用户时导致问题。

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

我们将在某个时候迁移到 VS2012,但现在我们使用的是 VS2010,而不是使用asyncand await

4

1 回答 1

1

就目前而言,我们调用的底层服务不是异步的,因此有人担心我们的 Web 服务层会最大化可用线程并在我们拥有大量用户时导致问题。

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

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

于 2013-02-18T15:11:40.507 回答