鉴于我们有job1 : Job
和job2 : Job
,我们想使job2
为job1
的子代(它们在单独创建时没有任何关系)。
宣告这种关系的正确方法是什么?因此,当取消job1
时,job2
也将取消...
我尝试了job1.attachChild(e1.job2 as ChildJob)
,但这是内部api。
当我从job1协程启动job2时,我不想做一些改动。
答案 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也将被取消。