我可以结合使用“重试”和“后备Polly”弹性策略吗?

时间:2019-03-22 12:29:59

标签: c# polly

我想执行某种操作,如果失败三次,则返回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语法来做到这一点?

1 个答案:

答案 0 :(得分:3)

Polly允许您通过PolicyWrapextensive 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());