我想在' action'中使用async,但是当我同时访问包含3个标签的页面时,它始终是同步的。
我找到了下一个标签页' startTime'是上一个标签' endTime'。因此,它不同步。
非常感谢。
public class TestController : Controller
{
public async Task<string> Index()
{
return await Task.Run(() =>
{
List<string> lst = new List<string>();
lst.Add(string.Format("startTime:{0}", DateTime.Now.ToString()));
var s = new Stopwatch();
s.Start();
System.Threading.Thread.Sleep(10000);
s.Stop();
lst.Add(string.Format("endTime:{0}", DateTime.Now.ToString()));
lst.Add(string.Format("total:{0}", s.Elapsed.TotalSeconds.ToString()));
return string.Join("<br/>", lst.ToArray());
});
}
}
答案 0 :(得分:0)
实际上它与async / await没有任何关系,你将它与并行请求执行混淆。
关于你的问题,我的猜测是由于会话锁定而发生这种情况。
默认情况下,ASP.NET MVC处理程序每次会话处理一个请求。原因是MVC处理程序假定可以修改每个请求会话,并且需要使用最新会话值处理所有顺序请求。您可以通过在控制器上设置正确的SessionStateBehavior.ReadOnly
或SessionStateBehavior.Disabled
来轻松更改此行为:
[SessionState(SessionStateBehavior.ReadOnly)]
public class TestController : Controller
{
public async Task<string> Index()
{
return await Task.Run(() =>
{
...
});
}
}
通过应用此属性,您可以禁用会话锁定,并允许在同一会话对象上并行执行多个请求。