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。

MVC 4 Async Action不能处理多个请求之间的等待

. NET MVC默认依赖于会话状态。ASP。. NET将阻止来自同一源的并发请求,如果它们依赖于会话状态。这就是为什么您会看到并发请求一次执行一次。

此外,AsyncController已经过时了。使用普通的控制器,你在async/Task/Task中包装的任何方法都是自动异步的,就像在普通代码中一样。

您有两种选择:禁用对会话的依赖或使用默认情况下不依赖会话的Web API,因此将并发运行