我正在使用 Polly 重试 Web 服务调用,以防调用因 WebException 而失败,因为我想确保在继续之前正确执行该方法。但是,有时即使重试几次,Web 方法仍然会抛出异常,我不想永远重试。我可以使用 Polly 显示一些确认对话框,例如“达到最大重试次数!确保连接已启用并按重试。” 然后重试计数器应重置为初始值并重新开始。我可以仅使用 Polly 来实现这一点,还是应该编写自己的逻辑?想法?
问问题
365 次
1 回答
1
Polly 没有内置任何东西来管理对话框,因为它与使用它的上下文完全无关。但是,您可以使用委托自定义重试时的额外行为,onRetry
以便您可以在其中挂接对话框。全面的:
- 使用外部RetryForever 策略,并在该策略上配置的操作中显示对话框
onRetry
。- 如果您想要一种让用户退出的方式
RetryForever
,则对话框中的取消操作可能会引发一些其他异常(您使用 try-catch 围绕所有策略进行捕获),从而导致退出。
- 如果您想要一种让用户退出的方式
- 在外部策略中,无论您想在没有干预的情况下进行多少次尝试
,都可以使用内部重试策略。
- 因为这是与 retryforever 不同的策略实例,并且具有固定的重试次数,所以每次执行时重试次数都会自动重新开始。
- 使用PolicyWrap将两个重试策略包装在一起。
在伪代码中:
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()
策略只是一种选择:您也可以手动构建等效策略。
于 2018-08-22T20:21:06.177 回答