Вызов функции в контроллере после возврата ответа от ActionMethod - PullRequest
0 голосов
/ 22 октября 2018

Я выполняю Ajax-вызов, который вызывает метод действия следующим образом:

Метод действия возвращает ответ после выполнения некоторой части работы.
Я хочу вызвать другой метод, как только этот ответ будет отправлен обратнок вызову Ajax.

 $.ajax({
        url: "/Test/TestActionMethod"; ,
        data: somejsondata,
        dataType: "json",
        type: 'POST',
        async: true,
        contentType: 'application/json; charset=utf-8',
        success: function (response) {

        }
});

И это мой actionMethod

public JsonResult TestActionMethod(bool test1, bool test2)
{  
      object response = null;
      // some code

      return Json(response, JsonRequestBehavior.AllowGet);

      Save(); // Here I want to call this method
}

Я знаю, что не могу вызвать такой метод Save (), я также знаю, что мы можем сделать еще один AjaxОднако, чтобы вызвать этот метод сохранения, я ищу способ, которым этот метод сохранения может быть вызван в самом контроллере вместо того, чтобы делать еще один вызов Ajax.

Есть ли способ сделать это?

[PS Я не хочу вызывать это до того, как ответ будет отправлен, так как эта функция требует времени и, следовательно, время отклика также увеличивается]

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Просто запустить и забыть использовать Task.Run () перед возвратом.

public async Task<IActionResult> ActionName()
{
    Task.Run(() => Save());
    return Ok();
}

private void Save()
{
    Thread.Sleep(5000);
}
0 голосов
/ 22 октября 2018

Невозможно выполнить код после возврата из метода действия контроллера.

Вы можете использовать фоновый рабочий для асинхронного запуска функции определения времени.

//Save method which will be taking time.
private void Save(CancellationToken ct)
{
    if (ct.IsCancellationRequested)
            return;

    // Long running code of saving data.. 
}


public JsonResult TestActionMethod(bool test1, bool test2)
{  
    object response = null;
    // some code

    // Initiating background work item to execute Save method.
    HostingEnvironment.QueueBackgroundWorkItem(ct => Save(ct));

    return Json(response, JsonRequestBehavior.AllowGet);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...