gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:11 26 4
gpt4 key购买 nike

我正在尝试测试我从这里阅读最多的 MVC4 异步 Controller 操作: http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4

下面是我的 Controller :

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 秒。这意味着每个请求都在前一个请求完成后被处理。这就是同步 Controller Action 所做的,但我希望异步 Controller Action 能够在等待时处理请求。为什么异步在上面的例子中不起作用?我做错了什么吗?

我在带有 .net 4.5 的 Windows 8.1 中使用 IIS 8.5。

提前致谢。

最佳答案

ASP.NET MVC 默认依赖于 session 状态。如果请求依赖于 session 状态,ASP.NET 将阻止来自同一源的并发请求。这就是为什么您看到您的并发请求一次被执行一次。参见 this question进一步解释。

此外,AsyncController 已过时。请改用普通 Controller ,您包装在 async/Task/Task 中的任何方法都会自动异步,就像它们在普通代码中一样。

您有两个选择:Disable dependency upon session或使用默认情况下不依赖于 session 的 Web API,因此将同时运行。

关于c# - MVC 4 Async Action 不处理等待之间的多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com