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

vac*_*ach 3 coroutine kotlin kotlinx.coroutines kotlin-coroutines

鉴于我们有job1 : Job并且job2 : Job我们想要创建job2一个子节点job1(它们单独创建没有关系)。

声明这种关系的正确方法是什么?以便job1取消时间job2也取消...

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

Ser*_*gey 5

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

public fun Job(parent: Job? = null): Job
Run Code Online (Sandbox Code Playgroud)

这意味着参数parent是可选的。所以你可以像这样创建你的工作:

var parentJob: Job = Job()
var childJob: Job = Job(parentJob)
Run Code Online (Sandbox Code Playgroud)

另请看一下SupervisorJob,它可以用于自定义Job. SupervisorJob工厂函数有类似的定义:

fun SupervisorJob(parent: Job? = null): Job
Run Code Online (Sandbox Code Playgroud)