请考虑以下事项:
public class FooController : Controller
{
public async Task<ActionResult> Foo()
{
await DoSomethingAsync();
...
return View();
}
public async Task<ActionResult> Bar()
{
await DoSomethingAsync();
...
return View();
}
...
}
对于控制器中的每个操作,重复此行await DoSomethingAsync();
。做类似的事情要好得多:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
await DoSomethingAsync();
}
但是,显然,您无法在同步方法中运行异步操作。我可以简单地强制异步操作来运行同步,但最后你不必要地阻塞线程。没有运行此同步,我有什么选择?
答案 0 :(得分:1)
不幸的是,ASP.NET MVC今天没有异步过滤器。 ASP.NET WebAPI确实拥有它们,ASP.NET vNext(结合MVC和WebAPI)确实拥有它们。
所以,今天我会说你最好不要重复这些代码,但将来(不久的将来,希望)可以清理。