异步控制器方法&Ajax

本文关键字:Ajax 方法 控制器 异步控制 异步 | 更新日期: 2023-09-27 17:50:19

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

    [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操作正在处理。我怎样才能使它在后台以非阻塞的方式工作?

异步控制器方法&Ajax

如何在后台以非阻塞的方式工作?

正如我在博客上解释的那样,async不会改变HTTP协议。根据你实际想做的事情,你可以尝试SignalR或使用分布式架构,具有可靠的队列和独立的后台进程,正如我在另一篇文章中提到的。

我想你需要这样的东西

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);
}