我想包装AsyncFallbackPolicy <- AsyncFallbackPolicy<bool> <- AsyncRetryPolicy的组合。
包装AsyncFallbackPolicy<bool> <- AsyncRetryPolicy工作得很好,得到的PolicyWrap是AsyncPolicyWrap<bool>。但是,一旦我添加了AsyncFallbackPolicy,我就会得到以下错误:
您已经在非泛型.Execute上执行了泛型FallbackPolicy方法。一个非泛型的FallbackPolicy只定义返回无效的回退操作;它永远不能返回替代的TResult值。若要使用FallbackPolicy提供回退TResult值,必须定义一般回退策略FallbackPolicy。例如,将策略定义为Policy.Handle.Fallback(/* TResult值或Func<.,TResult> */);
我通过await policyWrap.ExecuteAsync(async () => await ...执行这个政策
我想不出如何解决这个问题。可以这样包装吗?如果是,怎么做?
谢谢
发布于 2019-08-20 06:48:53
不可能在PolicyWrap中混合通用策略和非泛型回退策略。您应该将非泛型AsyncFallbackPolicy的行为移到泛型AsyncFallbackPolicy<bool>中。
说明:当AsyncFallbackPolicy<bool>包含在PolicyWrap中时,它会创建一个只能用于异步执行委托返回bool的AsyncPolicyWrap<bool>。
由于错误消息中所述的原因,非泛型AsyncFallbackPolicy不能参与异步返回bool的执行:
一个非泛型的FallbackPolicy只定义返回无效的回退操作;它永远不能返回替代的TResult值。
如果调用了非泛型AsyncFallbackPolicy (如果满足其句柄子句的条件),则它只包含异步返回void的代码.但是void不是bool类型允许的返回值,所以执行没有意义.所以波利不允许这样做。
https://stackoverflow.com/questions/57389344
复制相似问题