Максимальное количество повторных попыток с использованием DecorrelatedJitterBackoff - PullRequest
0 голосов
/ 13 марта 2020

Я использую политику 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;
            }

Заранее спасибо

...