【发布时间】:2013-07-28 03:49:56
【问题描述】:
我正在尝试在我的异步控制器中执行异步操作。我需要做的就是当我按下视图中的按钮时,它会给我一个警报,指示工作已发送完成。当工作完成后,我可以做一些事情(例如返回一个 json 或重定向到另一个视图)。这是我的代码:
服务器端:
public void DoWork()
{
var a = MakeADelay();
}
public async Task<ActionResult> MakeADelay()
{
await Task.Delay(5000);
return RedirectToAction("UploadComplete");
}
public ActionResult UploadComplete()
{
return View();
}
这是我的客户端代码:
$("#btnAsync").click(function () {
$.ajax({
url: '/Upload/DoWork',
type: "post",
success: function () {
alert("Work in Progress!!");
}
});
});
当此代码运行时,一切似乎都按预期执行,但是当服务器端代码到达语句 return RedirectToAction("UploadComplete"); 时,它什么也不做!我认为它在另一个线程中运行。
有什么问题?
第二个问题是 aync 动作实际上是什么意思?我从不希望我的行动等待陈述完成。我总是希望我的操作将作业发送到执行队列并返回给客户端,当作业完成时,我可以以某种方式通知客户端。我怎么能通知客户呢?用 SignalR 什么的?
【问题讨论】:
-
您是否对 UploadComplete() 操作有看法。你怎么说redirecttoactino什么都不做?
-
当然我有一个视图对应我的重定向语句。但是当它运行时不会发生重定向!你可以试试这个,让我知道它是否适合你。事实上,我的 UploadComplete() 方法永远不会被执行。断点永远不会命中。
-
对不起,我不熟悉 asyc 等待部分。所以我可能对你没有帮助。
标签: asp.net-mvc-4 async-await asynccontroller