作者回复: 很棒的分析!
作者回复: “如你所说,存在依赖关系的时候,我们就可以挂起函数与async结合了。” 这句话确实有歧义,这里的语境是:如果B任务依赖A的结果,C任务跟A、B没有关系,我们就可以这样做: ``` // 伪代码 runBlocking { val resultB = async { val temp = taskA() taskB(temp) } val resultC = async { taskC() } } ``` 总结就是:如果存在依赖关系,就直接用挂起函数串联;如果没有依赖关系,就可以用async并联。
作者回复: 本质还是“生命周期”、“结构化并发”哈,当然,本质还是CoroutineContext,这不刚好引出下节课嘛~
作者回复: 分析的不错。
作者回复: 赞!
作者回复: 它的作用是等待:job1/2/3对应的协程能够启动。
作者回复: 是这个意思。
作者回复: 单纯只是因为Job的状态变更没那么及时而已。
作者回复: 没错~
作者回复: 你可以试着运行一下看看效果,不要忽略了“launch(job) {}”当中的job参数哦!