private async Task <T> InterceptAsync <T>(Task <T> task, IInvocation invocation)
        {
            var sw = new Stopwatch();

            sw.Start();
            var ex = invocation.InvocationTarget as Exchange;

            try
            {
                var result = await task.ConfigureAwait(false);

                if (ex != null)
                {
                    _statisticsCollector.RegisterMethodCall(ex, invocation.Method.Name, sw.Elapsed);
                }
                return(result);
            }
            catch (Exception e)
            {
                _statisticsCollector.RegisterException(ex, invocation.Method.Name, e);

                throw;
            }
        }