我正在做一个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调用来调用此save方法,但是,我正在寻找可以在控制器本身中调用此save方法的方式而不是再次调用Ajax。
有什么办法吗?
[P.S。我不想在提交响应之前调用此函数,因为此函数需要时间,因此响应时间也会增加]
答案 0 :(得分:1)
请放火,在返回之前使用Task.Run()忘记。
public async Task<IActionResult> ActionName()
{
Task.Run(() => Save());
return Ok();
}
private void Save()
{
Thread.Sleep(5000);
}
答案 1 :(得分:0)
从Controller Action方法返回后,您将无法执行代码。
您可以使用后台工作程序异步触发计时功能。
//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);
}