private IMeasuredResponse <TReturnType> ExecuteMeasuredRequest <TReturnType>(IRestRequest request, Method method) where TReturnType : new() { var retryPolicy = Policy.Handle <NotSuccessfulRequestException>().WaitAndRetry(MaxRetryAttempts, i => PauseBetweenFailures); var measuredResponse = default(MeasuredResponse <TReturnType>); retryPolicy.Execute(() => { var watch = Stopwatch.StartNew(); request.Method = method; SetJsonContent(request); _executionProvider.OnMakingRequest(request, request.Resource); var response = WrappedClient.Execute <TReturnType>(request); _executionProvider.OnRequestMade(response, request.Resource); watch.Stop(); measuredResponse = new MeasuredResponse <TReturnType>(response, watch.Elapsed); if (!measuredResponse.IsSuccessful) { throw new NotSuccessfulRequestException(); } }); return(measuredResponse); }
private IMeasuredResponse ExecuteMeasuredRequest(IRestRequest request, Method method) { var retryPolicy = Policy.Handle <NotSuccessfulRequestException>().WaitAndRetry(MaxRetryAttempts, i => PauseBetweenFailures); var measuredResponse = default(MeasuredResponse); retryPolicy.Execute(() => { var watch = Stopwatch.StartNew(); request.Method = method; SetJsonContent(request); _executionProvider.OnMakingRequest(request, request.Resource); var response = WrappedClient.Execute(request); _executionProvider.OnRequestMade(response, request.Resource); watch.Stop(); measuredResponse = new MeasuredResponse(response, watch.Elapsed); if (!measuredResponse.IsSuccessful) { throw new NotSuccessfulRequestException($"Failed on URL= {measuredResponse.ResponseUri} {Environment.NewLine} {measuredResponse.StatusCode} {Environment.NewLine} {measuredResponse.Content}. Elapsed Time: {measuredResponse.ExecutionTime.ToString()}"); } }); return(measuredResponse); }
private async Task <IMeasuredResponse> ExecuteMeasuredRequestAsync(IRestRequest request, Method method, CancellationTokenSource cancellationTokenSource = null) { if (cancellationTokenSource == null) { cancellationTokenSource = new CancellationTokenSource(); } var retryPolicy = Policy.Handle <NotSuccessfulRequestException>().WaitAndRetryAsync(MaxRetryAttempts, i => PauseBetweenFailures); var measuredResponse = default(MeasuredResponse); await retryPolicy.ExecuteAsync(async() => { var watch = Stopwatch.StartNew(); request.Method = method; SetJsonContent(request); _executionProvider.OnMakingRequest(request, request.Resource); var response = await WrappedClient.ExecuteTaskAsync(request, cancellationTokenSource.Token).ConfigureAwait(false); _executionProvider.OnRequestMade(response, request.Resource); watch.Stop(); measuredResponse = new MeasuredResponse(response, watch.Elapsed); if (!measuredResponse.IsSuccessful) { throw new NotSuccessfulRequestException(); } }).ConfigureAwait(false); return(measuredResponse); }