[英]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.