假设我们有job1 : Jobjob2 : 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

09-04 11:59