文章目录
一、异常传播的特殊情况
1、取消子协程示例
2、子协程抛出异常后父协程处理异常时机示例
二、异常聚合 ( 多个子协程抛出的异常会聚合到第一个异常中 )
一、异常传播的特殊情况
----
在...父协程 进行处理 ;
如果 父协程 有多个子协程 , 多个子协程 都抛出异常 , 父协程会等到 所有子协程 都执行完毕会后 , 再处理 异常 ;
1、取消子协程示例
在下面的代码中 , 在 父协程中...,
但是 子协程 1 中的 finally 代码中的 1 秒执行完毕了 ;
子协程 2 早早抛出异常退出了 , 子协程 1 还执行了 1 秒 ,
最后 父协程 等 子协程 1 执行完毕后 , 才处理的...中 有多个 子协程 , 这些子协程 都 抛出了 异常 , 此时 只会处理 第一个 异常 ;
这是因为 多个 子协程 , 如果出现了多个异常 , 从第二个异常开始 , 都会将异常绑定到第一个异常上面 ;...在 CoroutineExceptionHandler 中 , 调用 throwable.suppressed.contentToString() 可以获取多个异常 , 被绑定的异常会存放到一个数组中