我正在尝试使用Kotlin协程而不是旧版Java线程来执行后台操作:
我从link中学到了,效果很好
val job = launch {
for(file in files) {
ensureActive() //will throw cancelled exception to interrupt the execution
readFile(file)
}
}
但是我的情况是我有一个非常复杂的readFile()调用函数,如何检查该函数中的作业是否处于 Activity 状态?val job = launch {
for(file in files) {
ensureActive() //will throw cancelled exception to interrupt the execution
complexFunOfReadingFile(file) //may process each line of the file
}
}
我不想在此协程范围内复制该函数的隐喻或将作业实例作为参数传递给该函数。处理此案的官方方式是什么?
非常感谢。
最佳答案
将complexFunOfReadingFile()
设为suspend
函数,并在其中定期添加yield()
或ensureActive()
调用。
例:
suspend fun foo(file: File) {
file.useLines { lineSequence ->
for (line in lineSequence) {
yield() // or coroutineContext.ensureActive()
println(line)
}
}
}