Kotlin 协程 异常与取消
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 协程 异常与取消相关的知识,希望对你有一定的参考价值。
@Test
fun `test cancel and exception`() = runBlocking<Unit>
val job1 = launch
val child = launch
try
delay(Long.MAX_VALUE)
finally
println("Child is cancelled.")
yield()
println("取消子协程")
child.cancelAndJoin()
yield()
println("父协程没有被取消")
job1.join()
取消的时候如果伴随其他的异常。。那么执行顺序是这样的
@Test
fun `test cancel and exception2`() = runBlocking<Unit>
val coroutineExceptionHandler = CoroutineExceptionHandler _, exception ->
println("Caught $exception")
val job = GlobalScope.launch(coroutineExceptionHandler)
launch
try
delay(Long.MAX_VALUE)
finally
withContext(NonCancellable)
println("children are cancel ,but exception is not handled until all children terminate")
delay(100)
println("The first child finished it's non cancellable block")
launch
delay(10)
println("Second child throws an exception")
throw ArithmeticException()
job.join()
也不难理解
取消的本身就伴随一个异常的 就是
JobCancellationException
以上是关于Kotlin 协程 异常与取消的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程取消 ① ( 协程作用域取消 | 协程作用域子协程取消 | 通过抛出异常取消协程 | Job#cancel 函数 | 自定义异常取消协程 )
kotlin 协程。作用域的取消,兄弟协程的取消,协程取消会异常
kotlin协程硬核解读(5. Java异常本质&协程异常传播取消和异常处理机制)
kotlin协程硬核解读(5. Java异常本质&协程异常传播取消和异常处理机制)