[英]Return RedirectToAction in MVC using async & await
我想使用Async返回一个动作并等待dot net 4.5中的功能。 我使用了以下代码。
public async Task<ActionResult> DisplayDashboard()
{
await Task.Run(() =>
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return RedirectToAction("Error", "Home");
}
});
}
它给出了以下错误,“无法将lambda表达式转换为委托类型'System.Action',因为块中的某些返回类型不能隐式转换为委托返回类型”。
任何人都可以建议我如何使用任务执行RedirectToAction。
public async Task<ActionResult> DisplayDashboard()
{
return await Task.Run<ActionResult>(() =>
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return View("Index");
}
});
}
为什么需要这段代码异步? 如果您只需要使此方法返回一个Task以满足某些接口要求,那么使用:
public Task<ActionResult> DisplayDashboard()
{
ActionResult result;
if (true)
{
result = RedirectToAction("Index", "Home");
}
else
{
result = View("Index");
}
return Task.FromResult(result);
}
Task.Run()实际上会使用不同的线程来传递给它的代码。 你似乎不需要在这里做到这一点。
这是旧的,但是谷歌返回的第一个结果值得纠正。 RedirectToAction()或View()的返回无法继续,所以为什么要等待结果。 因此,没有必要人为地将Task.Run()仅等待它。 async关键字已经将任何返回提升到任务中。 生成的代码更清晰。
public async Task<ActionResult> DisplayDashboard()
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return View("Error");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.