Сбросить счетчик повторных попыток Polly

Я определил политику Polly для повторной попытки при возникновении исключения. Политика определяется как

policy = Policy.Handle<ReconnectException>().Retry(retryCount);

и я вызываю свой метод с помощью

policy.Execute(()=>SendMessageWithRetryPolicy(message));

Как мне выполнить сброс, чтобы, если для моего MaxRetryCount установлено значение 5, и сообщение было успешно отправлено на этапе 3, мне снова нужно было выполнить 5 этапов?

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


person advapi    schedule 05.09.2019    source источник


Ответы (1)


Вам не нужно сбрасывать счетчик повторов между вызовами с помощью политики повторов Polly. Каждое отдельное выполнение через политику имеет право на полное количество повторов, настроенное в политике.

Если вы настроите:

policy = Policy.Handle<ReconnectException>().Retry(retryCount); // where retryCount == 5

затем каждое выполнение через политику:

policy.Execute(()=>SendMessageWithRetryPolicy(message));

будет иметь право на 6 попыток (1 начальная попытка + 5 повторных попыток). Если для первого выполнения используются 3 попытки, следующее выполнение по-прежнему имеет право на 6 попыток (1 первоначальная попытка + 5 повторных попыток).

person mountain traveller    schedule 05.09.2019
comment
Спасибо за ваш ответ, в моем случае polly отвечает за запуск всегда включенного, бесконечного действия цикла, которое выполняет прослушивание очереди IBM mq, поэтому мне нужно сбросить счетчик или посмотреть @ другой подход - person advapi; 06.09.2019
comment
Однократное выполнение через политику не предназначено для управления (извне) длительными многократными итерациями бесконечного цикла. Если сценарий - это лямбда, запускаемая таймером в этом вопросе, код, опубликованный в вопросе, не работает как политика для управления каждая итерация запускается таймером. Подходящим исправлением было бы переместить политику ближе (использовать ее более плотно) к коду, генерирующему исключение, в каждой итерации. - person mountain traveller; 06.09.2019
comment
@advapi Если вам нужна политика повторов Polly, которая никогда не исчерпает себя, вы можете использовать RetryForever или WaitAndRetryForever. - person mountain traveller; 08.09.2019