繁体   English   中英

ASP.NET MVC异步操作无法正常工作

[英]ASP.NET MVC Async Action doesn't work properly

这个简单的异步代码有问题。 执行通过TestAsync操作,执行通过delay方法,但是当delay方法返回时,则什么也没有发生。 似乎由于某种原因被阻止了。

public async Task<ActionResult> TestAsync()
{
     try
     {
         var res = await doLongOperation();
         return RedirectToAction("Index");
     }
     catch (Exception e) { }
 }

 private Task<bool> doLongOperation()
 {
     var test = new Task<bool>(() => { /*do the long operation..*/ return true; });
     return test;
 }

有什么建议吗?

new Task<bool>(() => true)返回尚未启动的任务。 这是一种旧语法,要求您在任务上调用Start方法。 如果不调用Start方法,则该任务将永远不会完成,因此异步执行将永远不会继续( await将永远异步等待)。

如果您只想延迟执行,则只需使用Task.Delay像这样:

private async Task<bool> delay()
{
    await Task.Delay(1000);

    return true;
}

通常,始终建议创建已在创建时启动的任务。

如果要创建在线程池线程上运行的任务,请使用Task.Run方法。

您的问题中张贴的方法无法正常运行,因为该任务尚未开始,没有完成,因此您的等待将无限期地等待。 如果要使用异步,最好一直使用异步,尤其是在ASP.NET上下文中。 如果您没有做任何真正异步的事情,那么在Web开发环境中,只需使其同步即可。

老实说,我相信这里要做的最好的事情就是让您花时间学习异步/等待,在这里找到了很好的资源: Stephen Cleary异步博客

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM