myfreax

如何停止/取消Kotlin协程

在长期运行的应用中,用户可能已经关闭了启动协程的页面,现在不再需要其结果,我们需要取消协程的运行

1 min read
By myfreax
如何停止/取消Kotlin协程
如何停止/取消Kotlin协程

异步或者非阻塞编程是开发非常重要的一部分,当创建服务器,桌面或者移动应用时。它提供用户一流的体验。但也是构建可伸缩应用的需要。

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()
}