【KTips】如何为Job指定两个"parent"

85 阅读1分钟

欢迎来到一分钟 KT Tips! 🎉

想必在日常生活中,大家总会遇到这样的苦恼:

我有一个 Job ,但是它有两个“候选parent”。这可愁坏了我们亲爱的小job:

val pJob1: Job = Job()

fun createJob(pJob2: Job): Job {
   
    return Job(pJob1 还是 pJob2 ?)
}

如果我们希望不论是pJob1还是pJob2只要它们结束了、或者终止了,都会告诉我们的小job,也让它停下脚步,那么该怎么办呢?

这时候,我们可以选择其中一个作为真正的 parent, 而其他人,则可以通过 invokeOnCompletion 来达到通知我们的小job的目的。

val pJob1: Job = Job()

fun createJob(pJob2: Job): Job {
    val job = Job(pJob2)
    pJob1.invokeOnCompletion { e -> 
        job.cancel(e?.let { CancellationException(it.message, it) })
    }
    
    return job
}

你学会了吗?

如果有更好的办法也欢迎评论区补充喔~我们下次再见 ヾ(•ω•`)o