Polly:用 AsyncFallbackPolicy 包裹 AsyncFallbackPolicy<TResult>

Polly: wrap AsyncFallbackPolicy<TResult> with AsyncFallbackPolicy

我想包装 AsyncFallbackPolicy <- AsyncFallbackPolicy<bool> <- AsyncRetryPolicy.

的组合

包装 AsyncFallbackPolicy<bool> <- AsyncRetryPolicy 工作正常,生成的 PolicyWrap 是 AsyncPolicyWrap<bool>。但是,一旦我添加 AsyncFallbackPolicy,我就会收到以下错误:

You have executed the generic .Execute method on a non-generic FallbackPolicy. A non-generic FallbackPolicy only defines a fallback action which returns void; it can never return a substitute TResult value. To use FallbackPolicy to provide fallback TResult values you must define a generic fallback policy FallbackPolicy. For example, define the policy as Policy.Handle.Fallback(/* some TResult value or Func<..., TResult> */);

我通过await policyWrap.ExecuteAsync(async () => await ...

执行政策

我不知道如何解决这个问题。可以这样包裹吗?如果是,如何?

谢谢

不能在 PolicyWrap 中混合通用和非通用回退策略。您应该将针对非通用 AsyncFallbackPolicy 的行为移至通用 AsyncFallbackPolicy<bool>.

说明:当AsyncFallbackPolicy<bool>包含在PolicyWrap中时,它会创建一个AsyncPolicyWrap<bool>,只能用于异步执行委托returning bool.

非泛型 AsyncFallbackPolicy 无法异步参与 returning bool 的执行,原因如错误消息中所述:

A non-generic FallbackPolicy only defines a fallback action which returns void; it can never return a substitute TResult value.

IE 如果非泛型 AsyncFallbackPolicy 被调用(如果满足其 Handle 子句的条件),它只包含异步代码 return void ... 但是void 不是类型 bool 允许的 return 值,因此执行没有意义...所以 Polly 不允许它。