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