Polly:用 AsyncFallbackPolicy 包装 AsyncFallbackPolicy

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

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

您已在非泛型 FallbackPolicy 上执行了泛型 .Execute 方法。非泛型 FallbackPolicy 仅定义返回 void 的后备操作;它永远不能返回替代的 TResult 值。要使用 FallbackPolicy 提供回退 TResult 值,您必须定义通用回退策略 FallbackPolicy。例如,将策略定义为 Policy.Handle.Fallback(/* some TResult value or Func<..., TResult> */);

我通过执行该政策await policyWrap.ExecuteAsync(async () => await ...

我不知道如何解决这个问题。可以这样包起来吗?如果是,怎么办?

谢谢


ITMISS
浏览 103回答 1
1回答

白板的微信

不可能在 PolicyWrap 中混合通用和非通用回退策略。您应该将针对非泛型的行为移至AsyncFallbackPolicy泛型中AsyncFallbackPolicy<bool>。说明:当AsyncFallbackPolicy<bool>包含在 PolicyWrap 中时,它会创建一个AsyncPolicyWrap<bool>只能用于执行异步返回的委托bool。由于错误消息中所述的原因,非泛型AsyncFallbackPolicy无法参与异步返回的执行:bool非泛型 FallbackPolicy 仅定义返回 void 的后备操作;它永远不能返回替代的 TResult 值。IE 如果调用非泛型AsyncFallbackPolicy(如果满足其 Handle 子句的条件),它只包含异步返回的代码void...但void不是 type 允许的返回值bool,因此执行没有意义...所以波莉不允许。
打开App,查看更多内容
随时随地看视频慕课网APP