完成C#异步功能后执行javascript函数

G--*_*G-- 1 c# asp.net-mvc jquery async-await

我有一个jquery Ajax函数

  var arr = {
                id: 1,
                run: true
            }
  $.ajax({
            url: '@Url.Action("Getdata", "Details")',
            data: { Batch: arr},
            type: "POST",
            success: function (result) {
                if (result) {
                    GenNamespace.Completed(result);
                }
            },
            error: function (result) { alert("Problem Occured"); },
        });
Run Code Online (Sandbox Code Playgroud)

它调用了c#async函数,并且在成功完成任务后,我在jquery ajax成功执行了一些函数

       public async Task<JsonResult> GetData(Batch arr)
    {
        try
        {
            var success = false;
            var t = await Task.Run(() =>
            {
            //i am Performing long running task here
             return Json(success, JsonRequestBehavior.AllowGet);
            }
            });
            return t;
          }
        catch (Exception ex)
        {
            throw ex;
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

但是这是一个异步函数,所以即使函数没有完全执行,值(success = false)也会返回到jquery成功,所以如何在完成此任务后调用javascript函数,是否有任务完成通知或我可以在这种情况下使用的东西?

iea*_*lle 5

下一个代码就像预期的那样工作(它几乎与你的相同):

    [HttpPost]
    public async Task<JsonResult> GetData()
    {
        var succ = false;
        var taskRes = await Task.Run(async () =>
       {
           await Task.Delay(10000);
           succ = true;
           return Json(succ, JsonRequestBehavior.AllowGet);
       });

        return taskRes;
    }

    $.ajax({
        url: '@Url.Action("GetData", "Home")',
        type: "POST",
        success: function (result) {
            console.log(result);
        },
        error: function (result) { alert("Problem Occured"); },
    });
Run Code Online (Sandbox Code Playgroud)

执行(10s)后,控制台中的'true'.