gpt4 book ai didi

Kotlin - 协程 yield() 它的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 15:17:25 29 4
gpt4 key购买 nike

我不确定 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 时,我得到以下结果:
  • 取消 child

    家长未取消

  • 但如果我保持原样,我会得到:
  • 取消 child

    child 被取消

    家长未取消

  • 使用 yield 是什么意思这里?

    最佳答案

    https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/yield.html

    Yields a thread (or thread pool) of the current coroutine dispatcher to other coroutines to run. If the coroutine dispatcher does not have its own thread pool (like Dispatchers.Unconfined) then this function does nothing, but checks if the coroutine Job was completed. This suspending function is cancellable. If the Job of the current coroutine is cancelled or completed when this suspending function is invoked or while this function is waiting for dispatching, it resumes with CancellationException.



    它至少完成了几件事
  • 它暂时降低当前长时间运行的 CPU 任务的优先级,为其他任务提供公平的运行机会。
  • 检查当前作业是否被取消,否则在 CPU 密集循环中,作业可能不会检查直到结束。
  • 允许子作业的进度,其中由于作业多于线程而存在争用。在当前工作应根据其他工作的进展进行调整的情况下,这可能很重要。
  • 关于Kotlin - 协程 yield() 它的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54967529/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com