假设我们有job1 : Job
和job2 : Job
,我们想将job2
设为job1
的子代(它们在单独创建时没有关系)。
宣告这种关系的正确方法是什么?因此,当取消job1
时,也会取消job2
...
我尝试了job1.attachChild(e1.job2 as ChildJob)
,但这是内部api。
当我从job1协程启动job2时,我不想做一些改动。
最佳答案
您可以使用Job(parent: Job?)
工厂函数来接收父作业作为参数。它具有以下定义:
public fun Job(parent: Job? = null): Job
这意味着参数父是可选的。
因此,您可以像这样创建作业:
var parentJob: Job = Job()
var childJob: Job = Job(parentJob)
还要看看
SupervisorJob
,它可用于自定义 Job
的默认行为。 SupervisorJob
工厂函数具有类似的定义:fun SupervisorJob(parent: Job? = null): Job