0

我正在使用 Polly 重试 Web 服务调用,以防调用因 WebException 而失败,因为我想确保在继续之前正确执行该方法。但是,有时即使重试几次,Web 方法仍然会抛出异常,我不想永远重试。我可以使用 Polly 显示一些确认对话框,例如“达到最大重试次数!确保连接已启用并按重试。” 然后重试计数器应重置为初始值并重新开始。我可以仅使用 Polly 来实现这一点,还是应该编写自己的逻辑?想法?

4

1 回答 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 回答