我知道AsyncController是为多线程目标而创建的。但我没有看到Controller类和AsyncController类的行为有任何不同。 例如HomeController:
public String First()
{
Thread.Sleep(5000);
return "First";
}
public String Second()
{
return "Second";
}
我尝试在firefox的第一个标签中执行/ Home / First / request,之后我尝试执行/ Home / Second /并且我看到第二个动作立即执行而没有任何延迟并且没有等待第一个动作。这意味着在并行线程和Controller类中执行的请求具有多线程支持。 当我用AsyncController替换Controller时,我没有注意到这些变化。
所以我的问题是:使用AsyncController有什么好处,在哪种情况下我应该使用那个类?
答案 0 :(得分:3)
可能存在用户请求等待大型IO操作的情况,例如从其他站点下载内容。如果为此请求提供服务的控制器是同步的,则线程将等待IO操作完成,并且服务器资源被浪费掉。服务器的线程数量有限,如果多个用户请求具有大IO开销的相同操作,服务器可能会达到其线程限制,应用程序将停止响应进一步的请求。
异步控制器的作用是,它不会使线程等待IO操作完成。它会触发IO操作并释放线程,并在操作完成后将其拉回。在操作过程中,线程是免费的,可以处理其他用户的请求,因此不再浪费,并且应用程序挂起的可能性较小。
应该注意的是,异步控制器不能用于更快地执行代码,因为它们不会这样做。