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

标签 c# asp.net multithreading async-ctp c#-5.0

我最近读了一篇关于 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/

相关文章:

c# - SignalR 和 sql 仅依赖于插入

html - 我的宽度页面比我的浏览器大

android - 如何在单独的线程中调用 startActivityForResult() 和 onResultActivity()?

c - errno 是线程安全的吗?

c# - 线程安全单例 : why the memory model does not guarantee that the new instance will be seen by other threads?

c# - WebConfigurationManager 和 ConfigurationManager 有什么区别?

javascript - 将消息从C#客户端发送到Socket到node.js + socket.io服务器

c# - 将数据存储在memcache中以供不同语言访问

c# - 如何将用户输入的字符串与任何表示本地主机的内容匹配?

asp.net - JavaScriptSerializer 用于序列化 JavaScript 函数名称