Я выполняю вызовы во внешнюю службу, которая не очень стабильна, и, таким образом, выдает WebExceptions.
Я хочу повторить попытку несколько раз, а после последней попытки хочу выбросить последнюю полученную ошибку.
Это моя попытка с Полли (v6.1.1) :
public static Policy WaitAndRetryPolicy<T>(short nrOfRetryAttempts = 5) where T : Exception
{
var waitAndRetry = Policy
.Handle<T>()
.WaitAndRetry(nrOfRetryAttempts, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
var fallbackForLastError = Policy
.Handle<T>()
.Fallback(
fallbackAction: () => { },
onFallback: (ex) => { throw ex; });
return Policy.Wrap(fallbackForLastError, waitAndRetry);
}
Вызывающий, устаревший VB.Net:
Dim retryPolicy = Policies.WaitAndRetryPolicy(Of WebException)()
Dim theResult = retryPolicy.
ExecuteAndCapture(Function()
Return aProxy.GetSomething(a, b)
End Function).Result
Когда я запускаю код каккак показано выше, theResult остается нулевым, и, похоже, служба не вызывается.Если я просто использую WaitAndRetryPolicy без функции Fallback , служба вызывается, и механизм повторных попыток работает как положено (без исключения, конечно, без исключения).
Как мне достичь своей цели,без проверки PolicyResult.FinalException в коде вызывающего абонента?