为了账号安全,请及时绑定邮箱和手机立即绑定

Polly:用 AsyncFallbackPolicy 包装 AsyncFallbackPolicy

Polly:用 AsyncFallbackPolicy 包装 AsyncFallbackPolicy

C#
ITMISS 2023-08-13 15:45:43
我想包装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 ...我不知道如何解决这个问题。可以这样包起来吗?如果是,怎么办?谢谢
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

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

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

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

非泛型 FallbackPolicy 仅定义返回 void 的后备操作;它永远不能返回替代的 TResult 值。

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


查看完整回答
反对 回复 2023-08-13
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信