19:Polly-处理Innerexception和Aggregateexception

本文介绍了Polly库v5.6.0中处理内嵌异常的改进语法,包括匹配特定类型、组合处理策略,并强调了如何保持原始AggregateException信息。新特性使异常处理更加灵活,便于统一处理不同级别的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译自:https://github.com/App-vNext/Polly/wiki/Handling-InnerExceptions-and-AggregateExceptions
点此跳转到系列目录

处理 InnerExceptions 和AggregateExceptions

Polly v5.6.0增加了新的语法来原生处理InnerException,包括普通异常和AggregateException

语法

.HandleInner<TException>()                       // 匹配类型为 TException 的所有内部异常
.HandleInner<TException>(Func<TException, bool>) // 匹配一个与Func匹配的内部TException
.OrInner<TException>()                           // 同上, '或' 语法
.OrInner<TException>(Func<TException, bool>)     // 同上, '或' 语法

处理内部异常可以与处理非内部异常以及处理返回的结果值自由组合。

使用

.Handleinner <TException>()既能匹配最顶层异常(如.Handle <>())也能匹配任何内部异常。

当通过策略执行的操作抛出一个AggregateException时,策略将额外检查同层的InnerExceptions是否匹配。

当通过策略执行操作时,抛出一个普通(非聚合)Exception,策略将递归地检查任何InnerException是否匹配。

Communicating matched inner exceptions to calling code

.Handleinner <TException>()子句匹配到内部异常时,为了方便起见,策略将匹配的内部异常替换为与调用代码通信的任何位置(而不是提供包装的外部异常)。

Feature内部异常将会传递到的代码位置
重试类策略onRetry
断路器类策略onBreak
circuitbreaker.LastException
the exception rethrown
回退策略onFallback
fallbackAction
ExecuteAndCapturePolicyResult.FinalException

这可以避免用户不得不复制代码逻辑提取内部异常,这样还可以使得给定的异常不管是顶级异常还是内部异常都能通过策略事件钩子(例如onRetryonBreak)以统一方式处理。

保留完整的AggregateException信息

如果想要保留原来的AggregateException信息(而不是替换匹配的内部异常),仍然可以通过直接处理AggregateException来实现:
.Handle(ae => /* etc */)

翻译自:https://github.com/App-vNext/Polly/wiki/Handling-InnerExceptions-and-AggregateExceptions
点此跳转到系列目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值