【发布时间】:2017-05-02 22:44:24
【问题描述】:
我想在“动作”中使用异步,但是当我同时访问带有 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());
});
}
}
【问题讨论】:
-
您可能误解了什么是异步控制器方法。这意味着在长时间运行的任务期间,线程被返回到线程池,因此可以处理更多的请求(它不会减少方法执行所花费的时间)。 Asynchronous Methods in ASP.NET
-
但是 ui 头总是在等待。直到上一个请求完成。
-
这与使您的方法异步无关。
标签: c# asp.net asp.net-mvc asynchronous async-await