Kotlin 将一个作业添加为另一个作业的子项的正确方法是协同路由?

Kotlin 将一个作业添加为另一个作业的子项的正确方法是协同路由?,kotlin,coroutine,kotlinx.coroutines,kotlin-coroutines,Kotlin,Coroutine,Kotlinx.coroutines,Kotlin Coroutines,假设我们有job1:Job和job2:Job,我们希望将job2作为job1的子项(它们单独创建时没有关系) 声明这种关系的正确方法是什么?这样当job1被取消时job2也被取消 我尝试了job1.attachChild(e1.job2作为ChildJob),但这是内部api。 当我从job1协同程序启动job2时,我不想做一些黑客操作。只需从job1的范围内启动job2即可。Job2将继承作用域,因此如果job1被取消,那么Job2也将被取消 您可以使用作业(父项:作业?工厂函数,该函数接收父

假设我们有
job1:Job
job2:Job
,我们希望将
job2
作为
job1
的子项(它们单独创建时没有关系)

声明这种关系的正确方法是什么?这样当
job1
被取消时
job2
也被取消

我尝试了
job1.attachChild(e1.job2作为ChildJob)
,但这是内部api。
当我从job1协同程序启动job2时,我不想做一些黑客操作。

只需从job1的范围内启动job2即可。Job2将继承作用域,因此如果job1被取消,那么Job2也将被取消

您可以使用
作业(父项:作业?
工厂函数,该函数接收父项作业作为参数。其定义如下:

public fun Job(parent: Job? = null): Job
fun SupervisorJob(parent: Job? = null): Job
这意味着参数父项是可选的。 因此,您可以创建如下工作:

var parentJob: Job = Job()
var childJob: Job = Job(parentJob)
还可以查看,它可用于自定义的默认行为<代码>主管职务工厂职能具有类似的定义:

public fun Job(parent: Job? = null): Job
fun SupervisorJob(parent: Job? = null): Job

这太糟糕了,这让我做了一些奇怪的事情来确保一个简单的亲子关系。。。应该有更好的办法。是的,我在提问后很快就发现了这一点,但仍然很糟糕,没有办法把两份工作联系起来。