【发布时间】:2019-07-24 20:06:46
【问题描述】:
我不确定yield 函数的用途是什么。你能检查一下我的这个例子吗?
我正在关注一个例子here。
代码如下:
val job = launch {
val child = launch {
try {
delay(Long.MAX_VALUE)
} finally {
println("Child is cancelled")
}
}
yield() //why do i need this ???????
println("Cancelling child")
child.cancel()
child.join()
yield()
println("Parent is not cancelled")
}
job.join()
当我注释掉第一个产量时,我得到以下结果:
-
取消孩子
父级未取消
但如果我保持收益不变,我会得到:
-
取消孩子
孩子被取消
父级未取消
在这里使用yield是什么意思?
【问题讨论】:
-
我自己现在不是 kotliner。在我看来更有趣的是:“我们需要
child.join()吗?”。看看playground——我稍微修改了这个例子,并在几个地方使用了注释-取消注释yields和joins。看起来join也产生了一个线程。 -
yield() 基本上意味着线程没有做任何重要的事情,如果需要运行其他线程,它们应该运行。所以是的,我想加入会这样做。我会调查的。谢谢