gpt4 book ai didi

Kotlin - 带循环的协程

转载 作者:行者123 更新时间:2023-12-02 12:24:03 25 4
gpt4 key购买 nike

所以,我有一个以这种方式遵循树结构的简单算法:

Simple tree

每次它从一个节点移动到下一个节点时,它会将前一个节点的属性传播到下一个节点等等,以模拟节点之间的影响。

有时一个节点可能连接到多个节点。

在我当前的实现中,算法在完成树的其余部分之前遵循每个拆分路径直到结束:

Split tree

这是次优的,因为所有其他分支都必须等待算法完成,这会浪费很多时间,尤其是在树非常大的情况下。

理想情况下,我希望每个拆分都产生一个新线程,以便并行探索所有路线。

我目前是 Kotlin 协程的新手,所以如果这看起来很愚蠢,请多多包涵。

目前,我正在考虑使用 Kotlin 的协程通过以下方式实现这一点(注意:这是近似代码):

suspend fun propagate(startFromNode: Node) {
coroutineScope {
while (true) {
//Do propagation
if (split) {
launch {
propagate(splitNode)
}
}
if (atEndOfPath) {
break
}
}
}
}

我不确定 Kotlin 如何处理协程也可以产生新协程的情况。

如果一个协程由于某种原因抛出异常,是否会取消所有源自该主协程范围的其他协程,包括已被其他协程启动的协程?

此外,如果可能的话,我想使用递归函数来实现这一点,但似乎没有一种简单的方法可以使用协程来实现。

谢谢。

最佳答案

如果阅读有关结构化并发的文章,您可以了解更多详细信息。但要回答您的直接问题。

您的实现看起来像我自己(可能大多数人)会写的那样。递归似乎是到达这里的方式,并且在您已经完成的情况下是可能的。

是的!对 propagate 的每次调用都将等待其子协程完成后再返回,因此当其中一个子级抛出异常时,父级和兄弟级将被取消(异常(exception)情况)。 coroutineScope 然后会抛出异常,这主要会取消整个协程堆栈。

关于Kotlin - 带循环的协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58207305/

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