Я использую политику polly DecorrelatedJitterBackoff для повторения запроса http. Мой пример использования - это то, что когда timeSpan достигает 300 секунд, он должен повторять макс. Число раз каждые 300 секунд.
Я пытаюсь добиться этого с помощью следующего кода. Я использовал int.MaxValue, который выдал исключение из диапазона, поэтому я использую 2100000000. Код работает, но выполнение занимает слишком много времени. Пожалуйста, предложите эффективный способ добиться этого?
private static readonly List<int> ExceptionCodes = new List<int> { 408, 429, 500, 503, 504, 520 };
var delay = Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromMilliseconds(2500), 10);
var decorrelatedJitterDelay = this.GetTimeSpanList(delay.ToArray());
this.RetryPolicy = Policy.HandleResult<HttpResponseMessage>(r => ExceptionCodes.Contains((int)r.StatusCode))
.WaitAndRetryAsync(decorrelatedJitterDelay);
var policyResult = this.RetryPolicy.ExecuteAndCaptureAsync(() => this.RequestServer(equipmentId));
private IEnumerable<TimeSpan> GetTimeSpanList(TimeSpan[] delay)
{
var index = 0;
var timeSpanList = new List<TimeSpan>();
foreach (var time in delay)
{
if (time > TimeSpan.FromSeconds(300))
{
var timeDelay = TimeSpan.FromSeconds(300);
delay[index] = timeDelay;
timeSpanList.Add(delay[index]);
}
index++;
}
// 2100000000 is the maximum capacity of List<>.
for (int i = index; i < 2100000000 - index; i++)
{
timeSpanList.Add(TimeSpan.FromSeconds(300));
}
return timeSpanList;
}
Заранее спасибо