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 协程作用域接口 )