public virtual void Intercept(IInvocation invocation)
        {
            MethodType methodType = GetMethodType(invocation.Method.ReturnType);

            switch (methodType)
            {
            case MethodType.AsyncAction:
                _asyncInterceptor.InterceptAsynchronous(invocation);
                return;

            case MethodType.AsyncFunction:
                GetHandler(invocation.Method.ReturnType).Invoke(invocation, _asyncInterceptor);
                return;

            default:
                _asyncInterceptor.InterceptSynchronous(invocation);
                return;
            }
        }
 /// <summary>
 /// This method is created as a delegate and used to make the call to the generic
 /// <see cref="IAsyncInterceptor.InterceptAsynchronous{T}"/> method.
 /// </summary>
 /// <typeparam name="TResult">The type of the <see cref="Task{T}"/> <see cref="Task{T}.Result"/> of the method
 /// <paramref name="invocation"/>.</typeparam>
 private static void HandleAsyncWithResult <TResult>(IInvocation invocation, IAsyncInterceptor asyncInterceptor)
 {
     asyncInterceptor.InterceptAsynchronous <TResult>(invocation);
 }