达到重试次数后 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() 策略只是一个选项:您也可以手动构建等效项。