如何在ASP.NET MVC5中执行异步控制器操作方法后调用异步方法?

时间:2017-07-31 07:02:56

标签: c# asp.net asp.net-mvc asynchronous

我要做的是在每个控制器的每个操作方法之后执行await unitOfWork.CommitChanges()(并且可能返回无效结果以指示发生错误)“每个请求的事务处理”功能。

目前,我已尝试使用自定义AsyncActionInvoker来覆盖EndInvokeActionMethod并在其中使用.Wait()方法。我认为它可能会导致问题,而且通常不是一个好方法。此外,我在重写.CommitChanges()内使用InvokeAction的同步变体,以使其以相同的方式用于同步操作方法。以下是完整的示例:

public class UnitOfWorkActionInvocker : AsyncControllerActionInvoker, IAsyncActionInvoker, IActionInvoker
{
    private IUnitOfWork unitOfWork;

    public UnitOfWorkActionInvocker(IUnitOfWork unitOfWork)
    {
        this.unitOfWork = unitOfWork;
    }

    public override bool InvokeAction(ControllerContext controllerContext, string actionName)
    {
        this.unitOfWork.CommitChanges();
        return base.InvokeAction(controllerContext, actionName);
    }

    public override bool EndInvokeAction(IAsyncResult asyncResult)
    {
        this.unitOfWork.CommitChangesAsync().Wait();
        return base.EndInvokeAction(asyncResult);
    }
}

我考虑过为此目的使用异步ActionFilter,但它只在WebApi中提供。 Mvc只有同步ActionFilters。

是否可以在EndInvokeAction 异步中调用异步方法?有更好的选择吗?

0 个答案:

没有答案