从异步任务返回 404

No1*_*ver 3 c# asp.net asp.net-mvc asynchronous async-await

我的 mvc 控制器中有这个方法:

public ActionResult BlaBla()
{
    if (!ModelState.IsValid)
        return new HttpNotFoundResult();

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想创建它的异步版本。所以,我想把代码改成这样:

public async Task<ActionResult> BlaBla()
{
    if (!ModelState.IsValid)
        return new HttpNotFoundResult(); // Compiling error: this line is not working

    // ...
}
Run Code Online (Sandbox Code Playgroud)

async Task<...>我的问题是使用style时如何从我的 mvc 控制器返回错误代码(404、500、...) ?

Dar*_*rov 6

采取行动必须有目的async,对吗?通常此目的是执行 I/O 绑定操作,例如通过您的异步服务公开的远程 TCP/HTTP 调用。

在此,典型的控制器操作如下所示:

public async Task<ActionResult> BlaBla()
{
    if (!ModelState.IsValid)
    {
        return new HttpNotFoundResult();
    }

    MyViewModel model = await myService.GetTheModel();
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,由于您已经等待async方法内的操作,因此它可以正常编译。如果您没有任何async操作,那么采取行动就没有什么意义async。它造成的伤害会大于帮助。所以现在您应该问自己的问题是:我真的有一些异步服务可以利用 I/O 完成端口来证明我需要使用异步操作吗?