我想使用.NET4.5中的异步和等待功能返回一个操作。我使用了以下代码。
public async Task<ActionResult> DisplayDashboard()
{
await Task.Run(() =>
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return RedirectToAction("Error", "Home");
}
});
}
它给出了以下错误,“无法将lambda表达式转换为委托类型'System.Action‘,因为块中的一些返回类型不能隐式转换为委托返回类型”。
谁能建议我如何使用任务执行RedirectToAction。
发布于 2016-12-05 06:45:45
public async Task<ActionResult> DisplayDashboard()
{
return await Task.Run<ActionResult>(() =>
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return View("Index");
}
});
}
发布于 2016-12-05 08:45:37
为什么你需要这个代码异步?如果您所需要的只是让此方法返回一个Task来满足某些接口要求,那么可以使用:
public Task<ActionResult> DisplayDashboard()
{
ActionResult result;
if (true)
{
result = RedirectToAction("Index", "Home");
}
else
{
result = View("Index");
}
return Task.FromResult(result);
}
Task.Run()实际上会使用与您传递给它的代码不同的线程。在这里,您似乎不需要这样做。
发布于 2019-05-22 10:11:43
这是旧的,但这是谷歌返回的第一个值得纠正的结果。无法继续从RedirectToAction()或View()返回,所以为什么还要等待结果。因此,不需要人为地使用Task.Run()来等待它。async关键字已经将任何返回提升到任务中。生成的代码更加整洁。
public async Task<ActionResult> DisplayDashboard()
{
if (true)
{
return RedirectToAction("Index", "Home");
}
else
{
return View("Error");
}
}
https://stackoverflow.com/questions/40968182
复制