在kotlinx.coroutines
库中,所有协同构建器(如launch
,async
等)都会使用CoroutineContext
参数,但还有一个parent
参数,其类型为{ {1}}。 Job
和CoroutineContext
之间有什么区别?
答案 0 :(得分:11)
Job
表示正在执行的协程或某种聚合任务。 Job
是CoroutineContext.Element
,这意味着它可以存储在协程上下文中。 CoroutineContext
是不同协程上下文元素的集合,其中job只是一个这样的元素。
ctx
类型为CoroutineContext
,那么您可以使用ctx[Job]
表达式从中检索作业。有关详细信息,请参阅coroutines design document和documentation for CoroutineContext的相应部分。
启动新协程时,可以指定完整的上下文。如果此上下文包含作业,则相应的作业将成为新协程的父。
parent
这样的协同构建器的launch
参数只是为了使父作业规范更加明确。作为launch
的文档突出显示here,显式指定的父作业优先于上下文中指定的作业。关于如何使用它的实际示例在指南的this section中给出。