public static AsyncRetryPolicy <HttpResponseMessage> ConfigureRetryReadPolicy(RetryRequestConfiguration readConfig)
        {
            var intervals = readConfig?.IntervalsMs ?? new List <int>()
            {
                100, 500
            };
            var readTimes = intervals.Select(ms => TimeSpan.FromMilliseconds(ms));

            var readRetry = Policy.HandleResult <HttpResponseMessage>(response =>
                                                                      readConfig.HttpStatusCodes.Any(code =>
                                                                                                     Enum.Parse <HttpStatusCode>(code) == response.StatusCode))
                            .WaitAndRetryAsync(readTimes,
                                               ((result, timespan, retryCount, context) =>
            {
                var request = result.Result.RequestMessage;
                Log.Logger.Warning(
                    $"{context.PolicyKey}: (read) retry attempt {retryCount} starting after {timespan.TotalMilliseconds} milliseconds. {request.Method} {request.RequestUri}");
            }));

            return(readRetry);
        }
        public static AsyncRetryPolicy <HttpResponseMessage> ConfigureRetryWritePolicy(RetryRequestConfiguration writeConfig)
        {
            AsyncRetryPolicy <HttpResponseMessage> writeRetry = null;

            if (writeConfig != null)
            {
                var writeTimes = writeConfig.IntervalsMs?.Select(ms => TimeSpan.FromMilliseconds(ms));

                writeRetry = Policy.HandleResult <HttpResponseMessage>(response =>
                                                                       writeConfig.HttpStatusCodes.Any(code =>
                                                                                                       Enum.Parse <HttpStatusCode>(code) == response.StatusCode))
                             .WaitAndRetryAsync(writeTimes ?? new List <TimeSpan>(),
                                                (result, timespan, retryCount, context) =>
                {
                    var request = result.Result.RequestMessage;
                    Log.Logger.Warning(
                        $"{context.PolicyKey}: (write) retry attempt {retryCount} starting after {timespan.TotalMilliseconds} milliseconds. {request.Method} {request.RequestUri}");
                });
            }

            return(writeRetry);
        }