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

时间:2017-12-07 07:42:53

标签: kotlin coroutine kotlin-coroutines

kotlinx.coroutines库中,所有协同构建器(如launchasync等)都会使用CoroutineContext参数,但还有一个parent参数,其类型为{ {1}}。 JobCoroutineContext之间有什么区别?

1 个答案:

答案 0 :(得分:11)

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

事实上,coroutine上下文更像是一个map,因为你可以使用coroutine元素键从中检索元素。例如,如果您的ctx类型为CoroutineContext,那么您可以使用ctx[Job]表达式从中检索作业。有关详细信息,请参阅coroutines design documentdocumentation for CoroutineContext的相应部分。

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

parent这样的协同构建器的launch参数只是为了使父作业规范更加明确。作为launch的文档突出显示here,显式指定的父作业优先于上下文中指定的作业。关于如何使用它的实际示例在指南的this section中给出。