MVC 4 Async Action不能处理多个请求之间的等待
本文关键字:请求 之间 等待 处理 Async Action 不能 MVC | 更新日期: 2023-09-27 17:51:18
我正试图测试MVC4异步控制器动作,我从这里读到最多:http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4
下面是我的控制器:public class HomeController : AsyncController
{
//
// GET: /Home/
public async Task<ActionResult> Index()
{
WriteOnFile("Here dude. Time: " + DateTime.Now.ToString("HH:mm:ss:fff"));
await Task.Delay(10000);
return View();
}
private void WriteOnFile(string text)
{
using (Mutex mutex = new Mutex(false, "TempFile"))
{
mutex.WaitOne();
using (var writer = new StreamWriter(@"D:'Temp'temp.txt", true))
{
writer.WriteLine(text);
}
mutex.ReleaseMutex();
}
}
}
我正在测试这一点,打开5个浏览器选项卡指向~/home/index,并一次刷新它们。
下面是我得到的输出:
- 这家伙。时间:09:09:04:108
- 这家伙。时间:09:09:14:129
- 这家伙。时间:09:09:24:160
- 这家伙。时间:09:09:34:176
- 这家伙。时间:09:09:44:200
时间戳间隔10秒。这意味着每个请求都是在前一个请求完成后处理的。这就是同步控制器动作所做的,但我希望异步控制器动作能够在等待时处理请求。为什么async不能在上面的例子中工作?我做错什么了吗?
我在Windows 8.1和。net 4.5中使用IIS 8.5。
. NET MVC默认依赖于会话状态。ASP。. NET将阻止来自同一源的并发请求,如果它们依赖于会话状态。这就是为什么您会看到并发请求一次执行一次。
此外,AsyncController已经过时了。使用普通的控制器,你在async/Task/Task中包装的任何方法都是自动异步的,就像在普通代码中一样。
您有两种选择:禁用对会话的依赖或使用默认情况下不依赖会话的Web API,因此将并发运行