【发布时间】:2015-12-06 11:00:28
【问题描述】:
我有一个 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"); },
});
调用 c# 异步函数,并在成功完成任务后,我正在 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;
}
但是这是一个异步函数,所以即使函数没有完全执行,值(成功 = false)也会返回到 jquery 成功,所以我如何仅在完成此任务后调用 javascript 函数,有吗任务完成通知或在这种情况下我可以在这里使用的东西?
【问题讨论】:
-
异步控制器操作仅从 asp.net 线程的角度来看是异步的,它们与 JavaScript 客户端调用者不异步。
-
@BenRobinson- 是的,没错,我想知道在这种情况下如何利用它来获得优势,
-
可能是一个愚蠢的问题,但你是否在 Task.Run 中将成功变量设置为 true?
-
不确定您要做什么,javscript 不会看到异步控制器操作与普通控制器操作之间的区别,它返回成功 false 的原因似乎是因为您从未将其设置为是的。
-
@ieaglle- 是的,我确实在函数的最后一行设置了,但最初它是错误的,但它不会等到函数完成,它会启动任务并返回jqAjax 的成功。
标签: c# jquery asp.net-mvc async-await