异步控制器

Asynchronous Controllers

在我的 MVC 项目中,我将始终使用异步控制器(async、Task、await)作为一般规则。

这是一个好习惯吗?

我知道您是否正在处理要检索的 IO 绑定数据(如图片等),但是如果某个特定方法被多个用户频繁访问怎么办?我认为这将是一个很好的做法,因为用户会 "not have to wait in line" 之前的调用完成执行 --- 正确吗?

什么时候使用异步控制器不是个好主意?

我认为除非您在控制器操作中执行异步代码,否则您不应该这样做 async。异步控制器操作方法不会 return 直接发送给客户端,请求在异步操作完成时暂停,然后请求响应在该操作完成后发回。

这可以使您的应用程序更具可扩展性,因为请求线程被释放以处理其他请求,并且异步工作不使用线程。因此,如果它受到大量用户的攻击,这将有利于性能。

但是,如果您正在做的工作不是异步的,那将没有任何区别,实际上会有一些开销,因为将为 async 方法生成一个状态机,并且可能会有额外的线程上下文切换。

我个人只会在异步控制器的工作受 IO 限制时才使用它们。如果它是 CPU 绑定的,你最好同步进行。