在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
完成,因为它应该在后台继续。请让我知道我在这里失踪了什么。
答案 0 :(得分:1)
当然它会等待,因为你正在使用ContinueWith
方法。如果你不想等待刚刚开始你的任务,就离开它。立即回复你的ActionResult:
var task = Task.Factory.StartNew(startMethod);
return RedirectToAction("Profile", "UserProfile");
Task.ContinueWith方法:创建一个执行的延续 目标任务完成时异步。
所以它按预期工作。