我最近读了一篇关于 c#-5
和新的很好的异步编程特性的文章。我看到它在 Windows 应用程序中效果很好。我的问题是此功能是否可以提高 ASP.Net 性能?
考虑这两个伪代码:
public T GetData()
{
var d = GetSomeData();
return d;
}
和
public async T GetData2()
{
var d = await GetSomeData();
return d;
}
在一个 ASP.Net 应用程序中,两个代码有区别吗?
谢谢
最佳答案
首先,您的第二段代码将返回 Task<T>
而不是 T
.最终的答案是“视情况而定”。
如果您的页面需要访问多个数据源,可能可以更简单地并行访问这些数据源,仅在必要时使用每次访问的结果。因此,例如,您可能希望开始将长时间运行的数据提取作为页面处理的第一部分,然后只需要最后的结果。显然,不使用 async/await 也可以做到这一点,但当语言帮助你时,它会简单得多。
此外,异步可用于在少量线程上处理大量长时间运行的请求,如果这些请求中的大多数在很长一段时间内都处于空闲状态 - 例如在长轮询场景中。我可以看到异步功能被用作 SignalR 的替代品在某些情况下。
异步在服务器端的好处比在客户端更难确定,因为它有不同的帮助方式——而“避免在 UI 线程上工作”方面非常明显,很容易看到好处。
请不要忘记,服务器端编码不仅仅是前端。根据我的经验,异步最有可能在实现 RPC 服务时有用,尤其是那些与多个其他 RPC 服务对话的服务。
正如 Pasi 所说,它只是语法糖 - 但我相信它是足够甜的糖,它很可能会区分适当的异步处理是否可行与过于复杂的工作。
关于c# - async 和 await 是否会提高 ASP.Net 应用程序的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9867005/