private void InterceptAsync(IInvocation invocation, IEnumerable <AbpAuthorizeAttribute> authorizeAttributes) { if (invocation.Method.ReturnType == typeof(Task)) { invocation.ReturnValue = InternalAsyncHelper .AwaitTaskWithPreActionAndPostActionAndFinally( () => { invocation.Proceed(); return((Task)invocation.ReturnValue); }, preAction: () => AuthorizeAsync(authorizeAttributes) ); } else //Task<TResult> { invocation.ReturnValue = InternalAsyncHelper .CallAwaitTaskWithPreActionAndPostActionAndFinallyAndGetResult( invocation.Method.ReturnType.GenericTypeArguments[0], () => { invocation.Proceed(); return(invocation.ReturnValue); }, preAction: async() => await AuthorizeAsync(authorizeAttributes) ); } }