波莉没有重试我的行动,我错过了什么?
What am I missing in this that Polly is not retrying my action?
public class PollyTest
{
public void RunWithPolly()
{
Console.WriteLine("RunWithPolly invoked...");
int zero = 0;
int result= 10 / zero;
}
}
然后在我的 Main 函数中创建如下策略:
var retryPolicy = Policy.Handle<DivideByZeroException>().Retry(3);
PollyTest pollyTest = new PollyTest();
retryPolicy.Execute(() => pollyTest.RunWithPolly());
当我执行它时,它总是在第一个 运行 本身的函数 "RunWithPolly" 内出现未处理的异常错误而失败。
TL;DR 您刚刚看到 VS 调试器因异常而中断。
回复:
When I execute this, it always fails with unhandled exception error inside function "RunWithPolly" on the very first run itself
您看到的不是 Polly 或执行失败。您只是看到调试器在抛出 DivideByZeroException
时中断(在您决定 whether/how 使用调试器控件继续执行之前向您展示)。
回复:
Annotating the method RunWithPolly with DebuggerStepThrough attribute resolved the problem
这并没有改变或 'fix' 关于执行的任何事情。它只是停止了调试器中断异常,让它看起来好像有什么不同的操作。
要亲自验证这一点,您可以将 Polly 策略声明为:
var retryPolicy = Policy
.Handle<DivideByZeroException>()
.Retry(3,
(ex, i) => { Console.Writeline($"Making retry {i} due to {ex.Message}."); }
);
运行 你的例子没有调试器,你会看到所有的重试。 运行 使用调试器 而没有 [DebuggerStepThrough]
属性,每次调试器中断时只需按 F5/debugger-continue,您将再次正确看到代码通过所有重试。 [DebuggerStepThrough]
对执行没有影响,只是对您在调试器中看到的内容有影响。
此 描述了相同的场景。
Polly wiki 详细描述了为什么会发生这种情况,VS 调试器对 'user-unhandled' 异常的含义,为什么这会令人困惑,以及配置各种版本 Visual Studio 的选项以减少这种调试噪音。
public class PollyTest
{
public void RunWithPolly()
{
Console.WriteLine("RunWithPolly invoked...");
int zero = 0;
int result= 10 / zero;
}
}
然后在我的 Main 函数中创建如下策略:
var retryPolicy = Policy.Handle<DivideByZeroException>().Retry(3);
PollyTest pollyTest = new PollyTest();
retryPolicy.Execute(() => pollyTest.RunWithPolly());
当我执行它时,它总是在第一个 运行 本身的函数 "RunWithPolly" 内出现未处理的异常错误而失败。
TL;DR 您刚刚看到 VS 调试器因异常而中断。
回复:
When I execute this, it always fails with unhandled exception error inside function "RunWithPolly" on the very first run itself
您看到的不是 Polly 或执行失败。您只是看到调试器在抛出 DivideByZeroException
时中断(在您决定 whether/how 使用调试器控件继续执行之前向您展示)。
回复:
Annotating the method RunWithPolly with DebuggerStepThrough attribute resolved the problem
这并没有改变或 'fix' 关于执行的任何事情。它只是停止了调试器中断异常,让它看起来好像有什么不同的操作。
要亲自验证这一点,您可以将 Polly 策略声明为:
var retryPolicy = Policy
.Handle<DivideByZeroException>()
.Retry(3,
(ex, i) => { Console.Writeline($"Making retry {i} due to {ex.Message}."); }
);
运行 你的例子没有调试器,你会看到所有的重试。 运行 使用调试器 而没有 [DebuggerStepThrough]
属性,每次调试器中断时只需按 F5/debugger-continue,您将再次正确看到代码通过所有重试。 [DebuggerStepThrough]
对执行没有影响,只是对您在调试器中看到的内容有影响。
此
Polly wiki 详细描述了为什么会发生这种情况,VS 调试器对 'user-unhandled' 异常的含义,为什么这会令人困惑,以及配置各种版本 Visual Studio 的选项以减少这种调试噪音。