如何停止/取消Kotlin协程
在长期运行的应用中,用户可能已经关闭了启动协程的页面,现在不再需要其结果,我们需要取消协程的运行
1 min read
By
myfreax
异步或者非阻塞编程是开发非常重要的一部分,当创建服务器,桌面或者移动应用时。它提供用户一流的体验。但也是构建可伸缩应用的需要。
Kotlin为解决这个问题提供灵活,语言级别的协程支持。同时提供为协程库提供更多的功能。
除此之外,为打开异步编程的大门,协程也提供更多能力,比如并发,actors。
在长期运行的应用中,你也许需要细化控制后台运行的协程。例如,用户可能已经关闭了启动协程的页面,现在不再需要其结果,我们需要取消协程的运行。
当调用launch
函数时,launch
函数将会返回Job对象。job表示一个后台运行的任务,Job对象可用于取消正在运行的协程。
在下面的示例中,代码println("World 2")
不会被运行,因为我们已经调用job.cancel()
函数取消协程的运行。
package com.myfreax
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
val job = launch {
delay(2000L)
println("World 2")
}
job.cancel()
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
fun main() = runBlocking { // this: CoroutineScope
doWorld()
}