Android 协程 不能被取消的任务
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 协程 不能被取消的任务相关的知识,希望对你有一定的参考价值。
正确示范
/**
* 不能被取消的任务
*/
@Test
fun `test cancel with NonCancellable`() = runBlocking<Unit>
val job = launch
try
repeat(1000) i ->
println("job:I'm sleeping $i...")
delay(500L)
finally
withContext(NonCancellable)
println("job : I'm running finally")
delay(1000L)
println("巴拉巴拉变")
delay(1300)
println("main:I'm tired of waiting")
job.cancelAndJoin()
println("main:Now i can quit.")
如果不加
withContext(NonCancellable)
是无法保证里面的延时任务能一定执行完成的。。甚至就不会打印出来巴拉巴拉变
以上是关于Android 协程 不能被取消的任务的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )
Kotlin 协程协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )
Kotlin 协程协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )
Kotlin 协程协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )
Kotlin 协程协程底层实现 ③ ( 结构化并发 | MainScope 作用域 | 取消协程作用域 | Activity 实现 CoroutineScope 协程作用域接口 )