如果为Polly重试策略配置的所有重试都已用尽,而执行的委托未成功,则重试策略将重新引发异常,不允许再次重试,如文档所示。
in the Polly readme
(重试区底部)和
Polly retry wiki
.
如果要引发与委托传播的异常不同的异常,可以执行以下任一操作:
编辑
:反映操作的原始策略正在处理结果,而不是异常。一种使用
后备政策
具有
保险单包装
可能如下:
var retry = Policy
.HandleResult<DescribeApplicationVersionsResponse>(x => x.ApplicationVersions[0]?.Status != ApplicationVersionStatus.Processed)
.WaitAndRetryAsync(10, retryAttempt => TimeSpan.FromSeconds(1), onRetry: (describeResponse, timeSpan, context) => {
Console.WriteLine($"Application version was '{describeResponse.Result.ApplicationVersions[0].Status}', retrying in {timeSpan}");
});
var fallback = Policy
.HandleResult<DescribeApplicationVersionsResponse>(x => x.ApplicationVersions[0]?.Status != ApplicationVersionStatus.Processed) // Probably worth factoring the predicate out into a method so that it is only stated once.
.FallbackAsync(async () => { throw new ReplacementException(); });
var r = await fallback.WrapAsync(retry)
.ExecuteAsync(() =>
BeanstalkClient.DescribeApplicationVersionsAsync(describeApplicationVersionRequest)
);