将ASP.NET MVC同步控制器(Controller
)更改为异步控制器(AsyncController
)似乎无关紧要,但是什么时候应该这样做?
我是否应该让每个控制器都异步,而不管其动作如何?如果在异步控制器中使用,将会改进哪些操作示例?
以最简单的例子:静态html页面。因此,您拥有最基本的控制器,只需从View
操作返回Index
。此控制器是否应更改为异步,即现在从IndexCompleted
返回?
答案 0 :(得分:8)
我最近正在阅读article。它认为它总结了AsyncController的用途。
答案 1 :(得分:6)
我知道这是一个老问题,但我很难得到答案,所以我的两分钱。
就像说如果我们没有发烧,我还应该吃药吗?如果在Web服务器上看到线程饥饿,则应使用Asynch控制器。 IIS Web服务器维护一个线程池。因此,当任何请求进入时,他从线程池中获取线程。如果在给定时刻池中的所有线程都被使用并且请求进入,则该请求进入等待模式。这种情况被称为“线程饥饿”。你也可以观看这个youtube视频,其中我已经演示了MVC线程饥饿的样子
当您将控制器设置为Asynch时,它会利用该线程,生成操作,并将该线程移回线程池,以便可以将其用于进入MVC应用程序的其他请求。操作完成后,他从线程池中拉回线程并显示视图。