协程是将工作作为另一个孩子添加的正确方法吗?

时间:2019-02-17 17:33:31

标签: kotlin coroutine kotlinx.coroutines kotlin-coroutines

鉴于我们有job1 : Jobjob2 : Job,我们想使job2job1的子代(它们在单独创建时没有任何关系)。

宣告这种关系的正确方法是什么?因此,当取消job1时,job2也将取消...

我尝试了job1.attachChild(e1.job2 as ChildJob),但这是内部api。 当我从job1协程启动job2时,我不想做一些改动。

2 个答案:

答案 0 :(得分:2)

您可以使用Job(parent: Job?)工厂函数,该函数接收父作业作为参数。它具有以下定义:

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

表示参数 parent 是可选的。 因此,您可以像这样创建工作:

var parentJob: Job = Job()
var childJob: Job = Job(parentJob)

还要看看SupervisorJob,它可以用来自定义Job的默认行为。 SupervisorJob工厂函数具有类似的定义:

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

答案 1 :(得分:0)

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