一尘不染

什么时候应该在ASP.NET MVC中使用异步控制器?

c#

我在ASP.NET MVC中使用异步操作时有些担心。什么时候可以改善我的应用程序的性能,什么时候 不可以

  1. 在ASP.NET MVC的任何地方使用异步操作是否很好?
  2. 关于等待方法:当我要查询数据库时(通过EF / NHibernate /其他ORM),我应该使用async / await关键字吗?
  3. 一个 单一的操作方法可以使用await关键字异步查询数据库多少次?

阅读 409

收藏
2020-05-19

共1个答案

一尘不染

*当一个动作必须执行几个独立的长时间运行的操作时, *异步动作 方法很有用。

AsyncController类的典型用法是长时间运行的Web服务调用。

我的数据库调用应该异步吗?

与数据库服务器相比,IIS线程池通常可以处理更多的同时阻止请求。如果数据库是瓶颈,异步调用将不会加快数据库响应速度。如果没有限制机制,则通过使用异步调用有效地将更多工作分配给不堪重负的数据库服务器,只会将更多的负担转移到数据库上。如果您的数据库是瓶颈,那么异步调用将不是魔术。

应该
看一下12参考

来自@PanagiotisKanavos评论:

而且,异步并不意味着并行。异步执行使宝贵的线程池线程免于阻塞外部资源,而没有任何复杂性或性能成本。这意味着同一台IIS机器可以处理更多的并发请求,而不是运行得更快。

您还应该考虑到阻塞调用始于占用大量CPU的Spinwait。在压力时期,阻止呼叫将导致延迟升级和应用程序池回收。异步调用只是避免这种情况

2020-05-19