private async Task ExecuteOperationAsync(
            IOperation operation,
            IOperationResultBuilder resultBuilder,
            CancellationToken cancellationToken)
        {
            var context = new HttpOperationContext(
                operation,
                _operationFormatter,
                resultBuilder,
                _resultParserResolver.Get(operation.ResultType),
                _clientFactory(),
                cancellationToken);

            try
            {
                await _executeOperation(context).ConfigureAwait(false);
            }
            finally
            {
                if (context.HttpResponse != null)
                {
                    context.HttpResponse.Dispose();
                }

                if (context.HttpRequest != null)
                {
                    context.HttpRequest.Dispose();
                }
            }
        }
        public async Task <IResponseStream> ExecuteInternalAsync(
            IOperation operation,
            CancellationToken cancellationToken)
        {
            var subscription = Subscription.New(
                operation,
                _operationFormatter,
                _resultParserResolver.Get(operation.ResultType));

            ISocketConnection connection = await _connectionFactory(cancellationToken)
                                           .ConfigureAwait(false);

            await _subscriptionManager.RegisterAsync(subscription, connection)
            .ConfigureAwait(false);

            return(subscription);
        }