async和await是否会提高ASP.Net应用程序的性能

我最近阅读了一篇关于c#-5和新的和漂亮的异步编程function的文章。 我看到它在Windows应用程序中运行很好。 问题来了我是否这个function可以提高ASP.Net性能?

考虑这两个psudo代码:

 public T GetData() { var d = GetSomeData(); return d; } 

 public async T GetData2() { var d = await GetSomeData(); return d; } 

在ASP.Net中有两个代码区别吗?

谢谢

好吧,首先你的第二段代码将返回Task而不是T 最终的答案是“它取决于”。

如果您的页面需要访问多个数据源,则可以更轻松地并行访问这些源,只在必要时使用每次访问的结果。 因此,例如,您可能希望开始将长时间运行的数据提取作为页面处理的第一部分,然后只需要最后的结果。 显然可以在不使用async / await的情况下执行此操作,但是当语言帮助您时,它会更简单。

此外,如果大多数请求在很多时候都处于空闲状态,例如在长轮询场景中,异步可用于处理少量线程上的大量长时间运行请求。 在某些情况下,我可以看到异步能力被用作SignalR的替代品。

服务器端async的好处比客户端更难确定,因为它有不同的帮助方式 – 而“避免在UI线程上工作”这一点非常明显,很容易看出它的好处。

不要忘记服务器端编码可能比前端更多。 根据我的经验,异步最有可能在实现RPC服务时很有用,特别是那些与多个其他 RPC服务通信的服务。

正如Pasi所说,它只是语法糖 – 但我相信它是足够甜的糖,它可能使正确的异步处理之间的差异变得可行,而且它只是太多的努力和复杂性。

定义’表现’。

最终,应用程序将执行与同步完成相同的工作量,这只是异步版本中的调用线程将等待操作在另一个上完成,而在同步模型中它是相同的线程执行任务。

最终,在这两种情况下,客户端都会等待相同的时间,然后才能看到来自Web服务器的响应,因此不会发现任何性能差异。

如果通过异步处理程序处理Web请求,那么响应仍将花费相同的时间返回 – 但是,您可以减少线程池的压力,使Web服务器本身在接受请求时更具响应性- 有关详细信息, 请参阅此其他SO 。

由于代码在服务器上执行,用户仍然需要等待响应,问题就像 – 异步调用比同步调用更快。

那么,这主要取决于服务器实现。 对于IIS和多个用户,每个用户将生成太multithreading(即使没有异步),异步也会效率低下。 但是如果用户数量很少,它应该更快。

一种方法是试试。

不。这些都是纯粹的语法糖,通过编写简单的代码并在修复错误时简单地读取代码,使您的程序员工作更轻松。

它确实允许更简单的方法来加载数据而不阻止UI,所以在某种程度上是,但不是真的。

如果你需要做多件事,它只会提高性能,这一切都可以在不需要任何其他信息的情况下完成。 否则你也可以按顺序完成它们。

就你的例子而言,答案是否定的。 无论如何,页面都需要等待每一页。