如何使用 WaitAndRetry 和 Execute 抛出最终错误?

How to throw final error using WaitAndRetry and Execute?

我正在尝试检查 Polly 的简单 WaitAndRetry

class Program
{
    public static void Main()
    {
           
        int i = 0;
        var _retryPolicy = Policy
       .Handle<Exception>()
        .WaitAndRetry(Backoff.ExponentialBackoff(TimeSpan.FromSeconds(2), 10),
           (exception, timespan) =>
           {
               Console.WriteLine($"Retry: {timespan}. \n ex: {exception}");
           });

        _retryPolicy.Execute(() =>
        {
            Console.WriteLine(i);
            i++;
            int.Parse("something");
        });

        Console.ReadLine();
    }
}   

而且我想在所有重试失败后抛出最后一个异常。我该怎么做?

异常结果:

重试:..

重试:..

重试:..

我的新最终错误!

谢谢!

您不必明确 re-throw 最后一个异常。

重试按以下方式进行:

  • 如果修饰方法抛出异常并且策略定义中有相关的 .Handle<TEx>.Or<TEx> 子句,则它会检查是否已达到重试限制
    • 如果没有超过重试限制,那么它将再次尝试重试
    • 如果已达到重试限制则将抛出最后一个异常
  • 如果没有相关的.Handle<TEx>.Or<TEx>子句那么它会抛出最后一个异常

这是来自 official documentation 的图表


另请注意,如果您 运行 您的应用程序处于调试模式,那么 IDE 可能会在每次装饰方法抛出异常时停止。这取决于您的 IDE 设置。