コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }