我想执行某种操作,如果失败三次,则返回null。在Polly这样的事情将是完美的:
var results = await Policy<IList<Value>>
.Handle<TaskCanceledException>()
.RetryAsync<IList<Value>>(3)
.FallbackAsync(null as IList<Value>)
.ExecuteAsync(() => myRestfulCall());
这是不可能的,因为RetryAsync
返回了AsyncRetryPolicy
,并且此类型上没有定义Fallback扩展方法。是否存在不需要try / catch块的Polly语法来做到这一点?
答案 0 :(得分:3)
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());