我可以结合 Retry 和 Fallback Polly 弹性策略吗?

Can I combine Retry and Fallback Polly resilience policies?

我想执行某个操作,如果失败3次return null。在 Polly 中这样的东西是完美的:

var results = await Policy<IList<Value>>
    .Handle<TaskCanceledException>()
    .RetryAsync<IList<Value>>(3)
    .FallbackAsync(null as IList<Value>)
    .ExecuteAsync(() => myRestfulCall());

这是不可能的,因为 RetryAsync return 是 AsyncRetryPolicy 并且没有在此类型上定义回退扩展方法。是否有不需要 try/catch 块的 Polly 语法来执行此操作?

Polly 允许您通过 PolicyWrap 灵活组合任何策略:extensive documentation here.

您引用的示例可以实现如下:

var fallback = Policy<IList<Value>>
    .Handle<TaskCanceledException>()
    .FallbackAsync(null as IList<Value>);

var retry = Policy<IList<Value>>
    .Handle<TaskCanceledException>()
    .RetryAsync<IList<Value>>(3);

var results = await fallback.WrapAsync(retry)
    .ExecuteAsync(() => myRestfulCall());