在控制器中的每个操作之前执行异步操作

时间:2014-07-31 19:53:50

标签: asp.net-mvc asynchronous

请考虑以下事项:

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();
}

但是,显然,您无法在同步方法中运行异步操作。我可以简单地强制异步操作​​来运行同步,但最后你不必要地阻塞线程。没有运行此同步,我有什么选择?

1 个答案:

答案 0 :(得分:1)

不幸的是,ASP.NET MVC今天没有异步过滤器。 ASP.NET WebAPI确实拥有它们,ASP.NET vNext(结合MVC和WebAPI)确实拥有它们。

所以,今天我会说你最好不要重复这些代码,但将来(不久的将来,希望)可以清理。