我可以结合 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());
我想执行某个操作,如果失败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());