在ASP.. NET MVC 2异步控制器,使动作过滤器异步执行

本文关键字:异步 执行 过滤器 异步控制 NET ASP MVC 控制器 | 更新日期: 2023-09-27 17:54:54

. NET MVC 2异步控制器,我们可以这样做:

public class SomeController : AsyncController
{
    [Blurb]
    public void FooAsync()
    {
        this.AsyncManager.OutstandingOperations.Increment();
        Task.Factory.StartNew(
            () =>
            {
                this.AsyncManager.Parameters["result"] = new BazResult();
                this.AsyncManager.OutstandingOperations.Decrement();
            });
    }
    public ActionResult FooCompleted(ActionResult result)
    {
        return result;
    }
}

我的问题是,在这种情况下,动作过滤器"Blurb"是否异步执行?换句话说,它的同步特性是否自动封装到异步调用中?

在ASP.. NET MVC 2异步控制器,使动作过滤器异步执行

我看了看AsyncControllerActionInvoker,它看起来确实把它们包装成一组异步调用和延续。它调用BeginInvokeActionMethodWithFilters,然后设置 invokeactionmethodfilterasynchron异步

对于那些好奇的人来说,源代码在codeplex上。