异步控制器方法& Ajax的

时间:2015-05-22 07:32:37

标签: c# .net asp.net-mvc

我的控制器中有这样的方法:

    [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操作的时间。 如何以非阻塞方式在后台进行此工作?

2 个答案:

答案 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