kotlin 失败的作业和异常完成的作业之间有何区别?

qgelzfjb  于 2023-02-09  发布在  Kotlin
关注(0)|答案(1)|浏览(235)

docs似乎在说它们是相同的,这是正确的解释吗?
当协程作业的主体抛出异常时,协程作业被称为异常完成;通过调用CompletableJob.completeExceptionally.com异常完成CompletableJob,异常完成的作业被取消,相应的异常成为作业取消的原因。
作业的正常取消与其失败的区别在于导致其取消的异常类型。引发CancellationException的协同程序被视为正常取消。如果取消原因是不同的异常类型,则该作业被视为失败。当作业失败时,其父级将被取消,但出现相同类型的异常。从而确保将作业的一部分委托给其子作业时的透明度。

kb5ga3dv

kb5ga3dv1#

我对the documentation的理解如下:

  • 您有两种类型的作业
  • 由启动创建的协同例程作业
  • 作业行为:当作为启动参数给出的代码块完成时,工作就完成了
  • CompletableJob的作业构造函数创建的作业
  • 该作业的行为:调用 * complete * 方法时完成

现在关于棘手的部分是关于结束之前完成一项工作

正常取消

https://pl.kotl.in/HpSW-5Jgd?theme=darcula

失效

  • 作业失败意味着附加到它的所有处理都失败
  • 子女、父母、堂兄弟姐妹进入"取消"状态
  • 我们可能会失败
  • 对于 * 可完成作业 *:使用NOT扩展CancellationException的参数调用完成异常
  • 抛出NOT扩展CancellationException的异常

https://pl.kotl.in/KNjyynfvw

答案

那么关于你的问题:

  • 失败作业是指作业具有非CancellationException的异常(第二种情况)
  • 异常完成的作业是失败或取消的作业(可以是第一种情况或第二种情况)

https://pl.kotl.in/miTSI972L
希望这有帮助:)

相关问题