我正在使用Polly重试Web服务调用,以防WebException调用失败,因为我想确保在继续操作之前方法正确执行。但是有时,即使重试了几次后,Web方法仍然会引发异常,我不想永远重试。我可以使用Polly显示一些确认对话框吗,例如“达到最大重试次数!确保已启用连接,然后按重试。”然后重试计数器应重置为初始值,然后重新开始。我可以仅使用Polly来实现这一目标,还是应该编写自己的逻辑?想法?
答案 0 :(得分:1)
Polly没有内置用于管理对话框的内容,因为它完全与使用它的上下文无关。但是,您可以使用onRetry
委托自定义重试时的额外行为,以便在其中挂接一个对话框。总体:
onRetry
操作中显示对话框。
RetryForever
的方法,则对话框中的取消动作可能会引发其他异常(您可以通过尝试捕获所有策略来捕获该异常),从而导致退出。使用伪代码:
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()
策略只是一种选择:您也可以手动构建等效策略。