Ваш try {} catch {}
глотает выброшенные исключения, прежде чем политика Полли сможет их обработать.Где у вас есть:
try
{
/* snip */
}
catch(WebException ex)
{
eventualFailures++;
Debug.WriteLine("Failure: " + eventualFailures);
}
Использование:
try
{
/* snip */
}
catch(WebException ex)
{
eventualFailures++;
Debug.WriteLine("Failure: " + eventualFailures);
throw;
}
Объяснение: Когда предложение catch
перехватывает исключение и не перебрасывает его, исключение не распространяется за пределы catch
блок, когда блок catch
завершается.Блок catch
поглощает исключение.
Чтобы Polly обработал исключение, исключение необходимо распространить из делегата, который вы передаете policy.Execute(() => )
, чтобы он был возвращен в политику,который затем обрабатывает это.
РЕДАКТИРОВАТЬ: Приведенный выше ответ намеренно демонстрирует минимум, который необходимо изменить по сравнению с опубликованным кодом, чтобы политика Polly обработала исключение.Как Сайрус предложил в комментариях, если единственное использование try
/ catch
предназначено для некоторой дополнительной регистрации, вы можете вместо этого сделать это в предложении onRetry
политики Polly и удалить try
/ catch
в целом.
ВТОРОЕ РЕДАКТИРОВАНИЕ: Если проблема заключается в том, что политика Полли все еще в конечном итоге отбрасывает WebException
, если все попытки повторяются: это преднамеренно ;RetryPolicy сигнализирует о том, что все попытки были сделаны безуспешно, перебрасывая последнее исключение.
Если вы хотите перехватить это последнее исключение, не добавляя свое собственное try
/ catch
, для этого можно использовать Polly .ExecuteAndCapture(...)
.