为什么Task.Factory.StartNew()。continuewith()没有按预期工作

时间:2014-01-16 06:16:15

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

在Asp.Net MVC项目中我有一个Asynchronus控制器,wand我还有一个类型为Task的动作来实现Asynchronus功能。

我有以下代码,

Action startMethod = delegate() { CreateUserFunctionality(user.UserID); };
            return Task.Factory.StartNew(startMethod).ContinueWith(
                    t =>
                    {
                        return (ActionResult)RedirectToAction("Profile", "UserProfile");
                    });

我也有,CreateUserFunctionality为

public void CreateUserFunctionality(int UsrId)
{
  if (UsrId !=0)
  {
     _userService.NewFunctionality(UsrId);
  }
}

我希望该函数将启动作业CreateUserFunctionality并返回用ContinueWith函数编写的视图。但是在我的情况下,continuewith part始终等待CreateUserFunctionality完成。我的目标是立即返回视图,而不是等待CreateUserFunctionality完成,因为它应该在后台继续。请让我知道我在这里失踪了什么。

1 个答案:

答案 0 :(得分:1)

当然它会等待,因为你正在使用ContinueWith方法。如果你不想等待刚刚开始你的任务,就离开它。立即回复你的ActionResult:

 var task = Task.Factory.StartNew(startMethod);
 return RedirectToAction("Profile", "UserProfile");

来自documentation:

  

Task.ContinueWith方法:创建一个执行的延续   目标任务完成时异步

所以它按预期工作。