繁体   English   中英

使用async和await返回MVC中的RedirectToAction

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM