我的mvc控制器中有这个方法:
public ActionResult BlaBla()
{
if (!ModelState.IsValid)
return new HttpNotFoundResult();
// ...
}
我想创建它的Async版本。所以,我想改变这样的代码:
public async Task<ActionResult> BlaBla()
{
if (!ModelState.IsValid)
return new HttpNotFoundResult(); // Compiling error: this line is not working
// ...
}
我的问题是如何在使用async Task<...>
样式时从我的mvc控制器返回错误代码(404,500,...)?
答案 0 :(得分:3)
使用async
操作时必须有目的,对吧?通常,此目的是执行I / O绑定操作,例如通过您的异步服务公开的远程TCP / HTTP调用。
在此,典型的控制器操作如下所示:
public async Task<ActionResult> BlaBla()
{
if (!ModelState.IsValid)
{
return new HttpNotFoundResult();
}
MyViewModel model = await myService.GetTheModel();
return View(model);
}
在这个例子中,由于你已经等待了方法中的async
操作,它将编译得很好。如果您没有任何async
操作,那么进行async
操作几乎没有意义。它会造成更多伤害然后帮助。所以现在你应该问自己的问题是:我是否真的有一些异步服务可以利用I / O完成端口来证明我需要使用异步操作?