我的控制器中有这样的方法:
[HttpPost]
public async Task<string> GetMenu(int? Current) {
await Task.Run(() => System.Threading.Thread.Sleep(60000));
return "";
}
我用这样的JQuery Ajax请求启动它:
$.ajax({
type: "POST",
url: '@Url.Action("GetMenu","Products")',
data: "{}",
async: true,
success: function (data) {
$('#menu-container').html(data);
},
});
浏览器会冻结正在处理的GetMenu操作的时间。 如何以非阻塞方式在后台进行此工作?
答案 0 :(得分:0)
我认为你需要这样的东西
HTML
<pre id="testpre">
not end
</pre>
JS
$.post("/Home/ProtocolAjaxHandler", { }, function (data) {
$("#testpre").html("END");
});
控制器
[HttpPost]
public ActionResult ProtocolAjaxHandler(object _param)
{
System.Threading.Thread.Sleep(15000);
return Json(null);
}
答案 1 :(得分:0)
如何以非阻塞方式在后台运行此工作?
我在博客上解释async
doesn't change the HTTP protocol。根据您实际尝试的操作,您可以尝试使用SignalR,也可以使用具有可靠队列和单独后台进程的分布式架构as I allude to in another post。