为什么我取消的外出工作还在继续



我有一个实验协同程序函数,如下

runBlocking {
Log.d("Track", "Launching...")
val job = launch(Dispatchers.IO) {
repeat(2000) {
repeat(2000) {
Log.d("Track", "Suspending...")
}
}
Log.d("Track", "Done...")
}
Log.d("Track", "Launched...")
delay(100)
Log.d("Track", "Canceling...")
job.cancel()
Log.d("Track", "Canceled...")
}

当我运行它时,即使在取消之后,协同程序也会继续作为下面的日志运行

Track: Launching...
Track: Launched...
Track: Suspending...
Track: Suspending...
Track: Canceling...
Track: Suspending...
Track: Suspending...
Track: Canceled...
Track: Suspending...
Track: Suspending...
Track: Suspending...
Track: Suspending...
:
: (a lot more suspending)
:
Track: Done...

为什么我不能取消我的郊游?我应该放一个yield()只是为了不时地检查一下,以防取消它吗?

显然,正如Kotlin文档中所提到的,取消是合作的。我们需要yield()或检查isActive

最新更新