Mat*_*att 5 jquery async-await asp.net-mvc-4
我在控制器上运行缓慢,我已转换为新的Async方法.它现在运行得更快,但是对它的任何jQuery Ajax调用都会返回以下字符串,
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]
Run Code Online (Sandbox Code Playgroud)
而不是等待异步完成.
我在这做错了什么?我已经遵循了我能找到的每一个例子,这不是要实施的火箭科学.
几乎遵循了本视频中概述的内容
http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287
而这个链接也是如此
我知道Async不会改变HTTP,但我期望的是长时间运行的Ajax调用在后台工作,然后在结束时返回给用户结果.然后,这将释放服务器以处理其他ajax调用,而不是阻止它们.
更新:
这是javascript代码
function doWork(options){
return $.ajax("/getData", {
contentType: 'text/json',
async: true,
success: $.proxy(options.callback, options.scope),
error: function (jqXHR, textStatus, error) {
options.callback.apply(options.scope, [error, textStatus, jqXHR]);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是我在C#中的控制器动作
[HttpGet]
[AsyncTimeout(60000)]
public async Task<ActionResult> GetData()
{
RestResponse<Data> response = new RestResponse<Data>();
try
{
Data result = null;
await Task.Factory.StartNew(() =>
{
result = ServerImpl.RetrieveData();
});
response.Value = result;
response.HttpStatusCode = 200;
}
catch (Exception ex)
{
response.HttpStatusCode = 500;
response.Value = null;
}
return Json(response, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 12
问题是您的服务器端操作使用ASP.NET Session,其特点是不是线程安全的.因此,ASP.NET将来自同一会话的并行请求排队并按顺序执行.拥有依赖会话的RESTful API是一个非常糟糕的设计,应该重新构建恕我直言,以便它不依赖于状态.
| 归档时间: |
|
| 查看次数: |
7296 次 |
| 最近记录: |