gpt4 book ai didi

kotlin - Coroutine Join 有什么作用?

转载 作者:行者123 更新时间:2023-12-02 12:16:30 26 4
gpt4 key购买 nike

例如,我有以下代码:

scope.launch {
val job = launch {
doSomethingHere()
}
job.join()

callOnlyWhenJobAboveIsDone()
}
Job.join()在文档中是这样的状态:

Suspends coroutine until this job is complete. This invocation resumes normally (without exception) when the job is complete for any reason and the Job of the invoking coroutine is still active. This function also starts the corresponding coroutine if the Job was still in new state.



如果我理解正确,因为 join()挂起协程直到它完成,然后我上面的代码将完全按照它想要的做。即方法 callOnlyWhenJobAboveIsDone()只会在 doSomethingHere() 时被调用完成了。那是对的吗?

谁能进一步解释 job.join() 的用例?提前致谢。

进一步解释我的用例:
val storeJobs = ArrayList<Job>()

fun callThisFunctionMultipleTimes() {
scope.launch {
val job = launch {
doSomethingHere()
}
storeJobs.add(job)
job.join()

callOnlyWhenJobAboveIsDone()
}
}

fun callOnlyWhenJobAboveIsDone() {
// Check if there is still an active job
// by iterating through the storedJobs
// and checking if any is active
// if no job is active do some other things
}

这是 job.join() 的有效用例吗? ?

最佳答案

That is, the method callOnlyWhenJobAboveIsDone() will only be called when doSomethingHere() is finished. Is that correct?


是的。

Can anyone explain further the use case for job.join()?


在你的情况下,实际上不需要另一份工作,你可以写:
scope.launch {
doSomethingHere()
callOnlyWhenJobAboveIsDone()
}
这将做完全相同的事情,因此它实际上并不是 Job 的用例。现在还有其他情况下 .join()真的很有用。
  • 您想并行运行(启动)多个异步操作,并等待所有这些操作完成:
  •       someData
    .map { Some.asyncAction(it) } // start in parallel
    .forEach { it.join() } // wait for all of them
  • 您必须跟踪异步状态,例如更新:
  •      var update = Job()

    fun doUpdate() {
    update.cancel() // don't update twice at the same time
    update = launch {
    someAsyncCode()
    }
    }
    现在要确保上次更新已完成,例如,如果您想使用一些更新的数据,您可以:
     update.join()
    任何地方,你也可以
     update.cancel()
    如果你想。
    什么是真正有用的 launch {}就是它不仅返回了一个Job,而且还把Job附加到了CoroutineScope上。通过它,您可以跟踪应用程序中发生的每个异步操作。例如,在您的 UI 中,您可以让每个 Element 扩展 CoroutineScope,然后如果 Element 离开渲染区域,您可以取消该范围,并且其中的所有更新/动画都将停止。

    关于kotlin - Coroutine Join 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020589/

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