CorotineContext和Job在kotlinx.coroutines之间有什么区别?

Rom*_*rov 7 coroutine kotlin kotlin-coroutines

kotlinx.coroutines库中,所有协同构建器(如launch,async等)都接受CoroutineContext参数,但也有parent一个类型为的附加参数Job.CoroutineContext和之间有什么区别Job

Rom*_*rov 13

Job代表协程或某种正在执行的总任务.A Job是a CoroutineContext.Element,这意味着它可以存储在协程上下文中.它CoroutineContext是不同的协程上下文元素的集合,其中job只是一个这样的元素.

事实上,协程上下文更像是一个映射,因为您可以使用协程元素键从中检索元素.例如,如果您具有ctxtype 值CoroutineContext,则可以使用ctx[Job]表达式从中检索作业.更多详细信息可以在coroutines设计文档的相应部分和CoroutineContext文档中找到.

启动新协程时,可以指定完整上下文.如果此上下文包含作业,则相应的作业将成为新协程的父级.

parent协同构建器之类的参数launch只是为了使父作业规范更加明确.作为此处launch重点的文档,显式指定的父作业优先于上下文中指定的作业.本指南的这一部分给出了如何使用它的实际示例.