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

时间:2016-03-22 20:10:42

标签: c# asp.net-mvc async-await

这个简单的异步代码存在问题。执行通过TestAsync操作并通过延迟方法,但是当延迟方法返回时,没有其他事情发生。 它似乎因某种原因而被阻止。

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;
 }

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

如果您只是想延迟执行,那么只需使用Task.Delay,如下所示:

await

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

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

答案 1 :(得分:0)

您问题中发布的方法无法正常运行,因为任务未启动,没有任何结束,因此您的等待无限期等待。如果您想使用Async,最好始终使用async,尤其是在ASP.NET上下文中。如果您没有做任何真正异步的事情,那么在Web开发环境中,只需允许它是同步的。

老实说,我相信这里要做的最好的事情就是花时间学习异步/等待,这里有一个很好的资源:Stephen Cleary Blog on Async

相关问题