【发布时间】:2014-06-12 02:56:34
【问题描述】:
我正在向各种 MVC 控制器发起多个 ajax 调用,以加载我页面的不同部分。然而,似乎当它到达控制器时,一次只运行一个。我猜这是因为默认情况下 ASP.Net MVC 控制器是同步的?我还测试了在 2 个浏览器选项卡上加载页面,第二个选项卡总是等待第一个。
为了解决这个问题,我尝试使有问题的控制器方法异步。我通过以下方式做到了这一点
- 将异步附加到控制器方法名称
- 使控制器方法返回异步任务
- 使用 Task.Factory.StartNew 方法在单独的线程中完成方法中的主体工作。
例如,有问题的控制器方法现在看起来像这样......
public async Task<JsonResult> GetUser(int userId)
{
var result = await Task.Factory.StartNew(() => Task.Run(() =>
{
return userService.GetUser(userId);
})).Result;
return new JsonResult()
{
Data = result,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
但它似乎仍然是同步的。我是否遗漏了什么或完全错误的方式?我并没有真正使用任务库,所以可能会遗漏一些重要的东西?
【问题讨论】:
-
顺便说一句,在 ASP.NET 中使用
Task.Factory.StartNew()或Task.Run()通常没有多大意义。而且将它们组合当然没有任何意义。
标签: asp.net-mvc-4 task-parallel-library