C# Polly WaitAndRetry(最后一个例外)什么也不做
我执行对不太稳定的外部服务的调用,因此抛出WebException。C# Polly WaitAndRetry(最后一个例外)什么也不做,c#,vb.net,polly,C#,Vb.net,Polly,我执行对不太稳定的外部服务的调用,因此抛出WebException。 我想重试几次,在最后一次尝试之后,我想抛出收到的最后一个错误 这是我的尝试: 当我像上面描述的那样运行代码时,结果保持为null,并且似乎服务没有被调用。 如果我只使用WaitAndRetryPolicy而不使用Fallback函数,则会调用服务,重试机制会按预期工作(当然不会抛出异常) 如何在不必检查调用方代码中的PolicyResult.FinalException的情况下实现我的目标?我不知道最后一个异常,但我已使用Re
我想重试几次,在最后一次尝试之后,我想抛出收到的最后一个错误 这是我的尝试: 当我像上面描述的那样运行代码时,结果保持为null,并且似乎服务没有被调用。 如果我只使用WaitAndRetryPolicy而不使用Fallback函数,则会调用服务,重试机制会按预期工作(当然不会抛出异常)
如何在不必检查调用方代码中的PolicyResult.FinalException的情况下实现我的目标?我不知道最后一个异常,但我已使用Retry和CircuitBreakerException(包装)实现了非常类似的行为。因此,您可以尝试3次,并在2次失败后抛出一个断路器异常。然后您就可以对最后一个异常做出反应
Policy
.Handle<SomeExceptionType>()
.CircuitBreaker(2, TimeSpan.FromMinutes(x));
策略
.Handle()
.断路器(2,时间跨度从分钟(x));
要让Polly重新显示任何最终异常,而不是将其捕获到PolicyResult中。FinalException
,只需使用.execute(…)
或.ExecuteAsync(…)
重载执行策略,而不是.ExecuteAndCapture(…)
或.executeAndCaptureAync(…)
后备策略的目标是什么?这个特定的公式可能不会添加任何内容——它只是重新引用抛出到它上面的异常。省略那个特定的公式,应该有完全相同的效果。要使最后一个异常重新捕获而不是捕获到PolicyResult.FinalException
,只需使用Execute(…)
而不是ExecuteAndCapture(…)
不,这很简单!我读的第一篇文章让我走错了路。Execute做的正是您所描述的,也是我所需要的,谢谢!
Dim retryPolicy = Policies.WaitAndRetryPolicy(Of WebException)()
Dim theResult = retryPolicy.
ExecuteAndCapture(Function()
Return aProxy.GetSomething(a, b)
End Function).Result
Policy
.Handle<SomeExceptionType>()
.CircuitBreaker(2, TimeSpan.FromMinutes(x));