Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC中的异步操作不起作用_Asp.net Mvc 4_Async Await_Asynccontroller - Fatal编程技术网

Asp.net mvc 4 MVC中的异步操作不起作用

Asp.net mvc 4 MVC中的异步操作不起作用,asp.net-mvc-4,async-await,asynccontroller,Asp.net Mvc 4,Async Await,Asynccontroller,我正在尝试在异步控制器中执行异步操作。我所需要做的就是当我按下视图中的按钮时,它会给我一个警报,指示工作已发送以完成。当工作完成后,我可以做一些事情(例如返回json或重定向到另一个视图)。这是我的密码: 服务器端: public void DoWork() { var a = MakeADelay(); } public async Task<ActionResult> MakeADelay() { await

我正在尝试在异步控制器中执行异步操作。我所需要做的就是当我按下视图中的按钮时,它会给我一个警报,指示工作已发送以完成。当工作完成后,我可以做一些事情(例如返回json或重定向到另一个视图)。这是我的密码:

服务器端:

    public void DoWork()
    {
       var a = MakeADelay();
    }

    public async Task<ActionResult> MakeADelay()
    {
       await Task.Delay(5000);
       return  RedirectToAction("UploadComplete");
    }

    public ActionResult UploadComplete()
    {
       return View();
    }
当这段代码运行时,所有代码似乎都按预期执行,但当服务器端代码到达语句
return RedirectToAction(“UploadComplete”)它什么都不做!我想它是在另一个线程中运行的

有什么问题

第二个问题是aync行动到底意味着什么?我从不希望我的行动等待陈述完成。我总是希望我的操作将作业发送到执行队列并返回到客户端,当作业完成时,我可以以某种方式通知客户端。我怎样才能通知客户呢?用信号器什么的

有什么问题

在这里:

public void DoWork()
{
   var a = MakeADelay();
}
这样做的目的是启动
MakeADelay
,然后立即返回其调用者,调用者可能会完成响应的创建并发送响应

延迟完成后,
MakeADelay
将通过调用
RedirectToAction
尝试继续执行。但是,该请求的响应已经发送,因此这很可能会导致异常(由于您从不等待任务
a
,因此将忽略该异常)。或者它不会做任何事情,但它肯定不会做的是回到过去,重写已经发送的响应

第二个问题是aync行动到底意味着什么

我有一本书,你可能会觉得有用。我也在我的博客上描述过——你仍然只会收到一个请求的回复。您试图做的是为一个请求发送两个响应,但这行不通

我总是希望我的操作将作业发送到执行队列并返回到客户端,当作业完成时,我可以以某种方式通知客户端。我怎样才能通知客户呢?用信号器什么的

那你就需要排队了。我建议使用进程外的持久性保证。例如,Azure队列、MSMQ、WebSphere MQ等


是的,您可以使用信号器进行通知。我建议。

您是否有UploadComplete()操作的视图。你怎么知道redirecttoactino什么都不做?当然我有一个视图对应我的Redirect语句。但当它运行时,不会发生重定向!你可以试试这个,让我知道是否是为你运行。事实上,我的UploadComplete()方法从未执行过。突破点从未达到。很抱歉,我不熟悉ASIC等待部分。所以我可能帮不了你。谢谢Stephen,你在异步方面是最棒的。这正是我一直在等待的答案
public void DoWork()
{
   var a = MakeADelay();
}