public async Task <HttpResponseMessage> ExecuteRequestAsync(ODataRequest request, CancellationToken cancellationToken) { HttpConnection httpConnection = null; try { await PreExecuteAsync(request).ConfigureAwait(false); _session.Trace("{0} request: {1}", request.Method, request.RequestMessage.RequestUri.AbsoluteUri); if (request.RequestMessage.Content != null && (_session.Settings.TraceFilter & ODataTrace.RequestContent) != 0) { var content = await request.RequestMessage.Content.ReadAsStringAsync().ConfigureAwait(false); _session.Trace("Request content:{0}{1}", Environment.NewLine, content); } HttpResponseMessage response; if (_session.Settings.RequestExecutor != null) { response = await _session.Settings.RequestExecutor(request.RequestMessage).ConfigureAwait(false); } else { httpConnection = _session.Settings.RenewHttpConnection ? new HttpConnection(_session.Settings) : _session.GetHttpConnection(); response = await httpConnection.HttpClient.SendAsync(request.RequestMessage, cancellationToken).ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { cancellationToken.ThrowIfCancellationRequested(); } } _session.Trace("Request completed: {0}", response.StatusCode); if (response.Content != null && (_session.Settings.TraceFilter & ODataTrace.ResponseContent) != 0) { var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); _session.Trace("Response content:{0}{1}", Environment.NewLine, content); } await PostExecute(response).ConfigureAwait(false); return(response); } catch (WebException ex) { throw WebRequestException.CreateFromWebException(ex); } catch (AggregateException ex) { if (ex.InnerException is WebException) { throw WebRequestException.CreateFromWebException(ex.InnerException as WebException); } else { throw; } } finally { if (httpConnection != null && _session.Settings.RenewHttpConnection) { httpConnection.Dispose(); } } }