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); }