达到重试次数后 Polly 显示对话框
Polly show dialog after retry count reached
我正在使用 Polly 重试 Web 服务调用,以防调用因 WebException 而失败,因为我想确保方法在继续之前正确执行。然而,有时即使重试几次,网络方法仍然会抛出异常,我不想永远重试。我可以使用 Polly 来显示一些确认对话框吗? "Max retry count reached! Make sure connection is enabled and press retry." 然后重试计数器应重置为初始值并重新开始。我可以仅使用 Polly 来实现这一点,还是应该编写自己的逻辑?想法?
Polly 没有任何内置的管理对话框,因为它完全不知道使用它的上下文。但是,您可以使用 onRetry
委托自定义重试时的额外行为,这样您就可以在其中挂接一个对话框。总体:
- 使用外部 RetryForever policy,并在该策略上配置的
onRetry
操作中显示对话框。
- 如果您想要一种让用户退出
RetryForever
的方法,对话框中的取消操作可能会抛出一些其他异常(您使用 try-catch 围绕所有策略捕获),导致一个出口。
- 在外部策略中,使用内部 Retry policy 进行任意多次尝试而无需干预。
- 因为这个和retryforever是不同的策略实例,并且有固定的重试次数,所以每次执行都会自动重新开始重试次数。
- 使用PolicyWrap to wrap the two retry policies together.
在伪代码中:
var retryUntilSucceedsOrUserCancels = Policy
.Handle<WhateverException>()
.RetryForever(onRetry: { /* show my dialog box*/ });
var retryNTimesWithoutUserIntervention = Policy
.Handle<WhateverException>()
.Retry(n); // or whatever more sophisticated retry style you want
var combined = retryUntilSucceedsOrUserCancels
.Wrap(retryNTimesWithoutUserIntervention);
combined.Execute( /* my work */ );
当然,使用外部 RetryForever()
策略只是一个选项:您也可以手动构建等效项。
我正在使用 Polly 重试 Web 服务调用,以防调用因 WebException 而失败,因为我想确保方法在继续之前正确执行。然而,有时即使重试几次,网络方法仍然会抛出异常,我不想永远重试。我可以使用 Polly 来显示一些确认对话框吗? "Max retry count reached! Make sure connection is enabled and press retry." 然后重试计数器应重置为初始值并重新开始。我可以仅使用 Polly 来实现这一点,还是应该编写自己的逻辑?想法?
Polly 没有任何内置的管理对话框,因为它完全不知道使用它的上下文。但是,您可以使用 onRetry
委托自定义重试时的额外行为,这样您就可以在其中挂接一个对话框。总体:
- 使用外部 RetryForever policy,并在该策略上配置的
onRetry
操作中显示对话框。- 如果您想要一种让用户退出
RetryForever
的方法,对话框中的取消操作可能会抛出一些其他异常(您使用 try-catch 围绕所有策略捕获),导致一个出口。
- 如果您想要一种让用户退出
- 在外部策略中,使用内部 Retry policy 进行任意多次尝试而无需干预。
- 因为这个和retryforever是不同的策略实例,并且有固定的重试次数,所以每次执行都会自动重新开始重试次数。
- 使用PolicyWrap to wrap the two retry policies together.
在伪代码中:
var retryUntilSucceedsOrUserCancels = Policy
.Handle<WhateverException>()
.RetryForever(onRetry: { /* show my dialog box*/ });
var retryNTimesWithoutUserIntervention = Policy
.Handle<WhateverException>()
.Retry(n); // or whatever more sophisticated retry style you want
var combined = retryUntilSucceedsOrUserCancels
.Wrap(retryNTimesWithoutUserIntervention);
combined.Execute( /* my work */ );
当然,使用外部 RetryForever()
策略只是一个选项:您也可以手动构建等效项。