public async Task DuplexStreamingServerHandler(IAsyncStreamReader <TRequest> requestStream, IServerStreamWriter <TResponse> responseStream, DuplexStreamingServerMethod <TRequest, TResponse> continuation)
        {
            try
            {
                var tracingRequestStream  = new TracingAsyncServerStreamReader <TRequest>(requestStream, _context, _tracer.Request);
                var tracingResponseStream = new TracingServerStreamWriter <TResponse>(responseStream, _context, _tracer.Response);
                await continuation(tracingRequestStream, tracingResponseStream, _context).ConfigureAwait(false);

                _tracer.Finish(_context);
            }
            catch (Exception ex)
            {
                _tracer.Exception <object>(_context, ex);
                throw;
            }
        }
        public async Task ServerStreamingServerHandler(TRequest request, IServerStreamWriter <TResponse> responseStream, ServerStreamingServerMethod <TRequest, TResponse> continuation)
        {
            try
            {
                var tracingResponseStream = new TracingServerStreamWriter <TResponse>(responseStream, _context, _tracer.Response);
                _tracer.Request(request, _context);
                await continuation(request, tracingResponseStream, _context).ConfigureAwait(false);

                _tracer.Finish(_context);
            }
            catch (Exception ex)
            {
                _tracer.Exception(_context, ex, request);
                throw;
            }
        }