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