代码之家  ›  专栏  ›  技术社区  ›  bigb055

达到重试计数后Polly显示对话框

  •  0
  • bigb055  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   mountain traveller    6 年前

    Polly没有任何内置的管理对话框的功能,因为它对使用它的上下文完全不可知。但是,您可以使用 onRetry

    • 使用外部 RetryForever policy onRetry公司 在该策略上配置的操作。
      • 如果您想让用户退出 RetryForever ,对话框中的取消操作可能会引发其他异常(使用try-catch捕获所有策略)以导致退出。
    • 在外部策略中,使用内部策略 Retry policy 不管你想做多少次尝试,都不要干涉。
      • 因为这是与retryforever不同的策略实例,并且具有固定的重试计数,所以每次执行重试计数时,都会自动重新启动。
    • 使用 PolicyWrap 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() 策略只是一个选项:您还可以手动生成等效的。