如何使用 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 设置。
我正在尝试检查 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 设置。