C# 我可以将重试和回退策略结合起来吗?

C# 我可以将重试和回退策略结合起来吗?,c#,polly,C#,Polly,我想执行某个操作,如果失败三次,则返回null。在波利身上有这样的东西是完美的: var results = await Policy<IList<Value>> .Handle<TaskCanceledException>() .RetryAsync<IList<Value>>(3) .FallbackAsync(null as IList<Value>) .ExecuteAsync(()

我想执行某个操作,如果失败三次,则返回null。在波利身上有这样的东西是完美的:

var results = await Policy<IList<Value>>
    .Handle<TaskCanceledException>()
    .RetryAsync<IList<Value>>(3)
    .FallbackAsync(null as IList<Value>)
    .ExecuteAsync(() => myRestfulCall());
var结果=等待策略
.Handle()
.RetryAsync(3)
.FallbackAsync(作为IList为空)
.ExecuteAsync(()=>myRestfulCall());

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

Polly允许您通过
PolicyWrap
灵活组合任何策略

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

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());
var fallback=策略
.Handle()
.FallbackAsync(作为IList为空);
var重试=策略
.Handle()
.RetryAsync(3);
var results=await fallback.WrapAsync(重试)
.ExecuteAsync(()=>myRestfulCall());

我想在调用
WrapAsync
之前,您错过了一个
wait
,但谢谢您,这正是我错过的。