public void Intercept(IInvocation invocation)
        {
            invocation.Proceed();
            Stopwatch sw = new Stopwatch();

            sw.Start();
            var targetMethodInfo = invocation.ExtractTargetMethodInfo <T>();
            var interceptorType  = _interceptors[targetMethodInfo.InterceptorType];
            var genericType      = interceptorType.MakeGenericType(typeof(T));

            var factory         = (IHttpInterceptorFactory <T>)Activator.CreateInstance(genericType);
            var callInterceptor = factory.Create(Serializer, ServiceInformation, targetMethodInfo, Headers);

            sw.Stop();
            Console.WriteLine($"interception preperation took {sw.ElapsedTicks}");

            if (invocation.Method.ReturnType == typeof(Task))
            {
                invocation.ReturnValue = CreateSuspendedTaskForExecution(invocation, callInterceptor);
            }
            else if (invocation.Method.ReturnType.IsGenericType && invocation.Method.ReturnType.GetGenericTypeDefinition() == typeof(Task <>))
            {
                invocation.ReturnValue = CreateSuspendedTaskForExecution((dynamic)invocation.ReturnValue, invocation, callInterceptor);
            }
            else
            {
                var firstInterceptor = ChainInterceptors(GlobalInterceptors, callInterceptor);
                firstInterceptor.Proceed(invocation);
            }
        }