Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Polly WaitAndRetry(最后一个例外)什么也不做_C#_Vb.net_Polly - Fatal编程技术网

C# Polly WaitAndRetry(最后一个例外)什么也不做

C# Polly WaitAndRetry(最后一个例外)什么也不做,c#,vb.net,polly,C#,Vb.net,Polly,我执行对不太稳定的外部服务的调用,因此抛出WebException。 我想重试几次,在最后一次尝试之后,我想抛出收到的最后一个错误 这是我的尝试: 当我像上面描述的那样运行代码时,结果保持为null,并且似乎服务没有被调用。 如果我只使用WaitAndRetryPolicy而不使用Fallback函数,则会调用服务,重试机制会按预期工作(当然不会抛出异常) 如何在不必检查调用方代码中的PolicyResult.FinalException的情况下实现我的目标?我不知道最后一个异常,但我已使用Re

我执行对不太稳定的外部服务的调用,因此抛出WebException。
我想重试几次,在最后一次尝试之后,我想抛出收到的最后一个错误

这是我的尝试:

当我像上面描述的那样运行代码时,结果保持为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));