kotlinx.coroutines库中,所有协程生成器(如launchasync等)都采用CoroutineContext参数,但也具有带有parent类型的附加Job参数。 CoroutineContextJob有什么区别?

最佳答案

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

实际上,协程上下文更像是一个 map ,因为您可以使用协程元素键从中检索元素。例如,如果您具有类型ctx的值CoroutineContext,则可以使用ctx[Job]表达式从中检索作业。可以在coroutines design documentdocumentation for CoroutineContext的相应部分找到更多详细信息。

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

协程生成器(例如parent)的launch参数只是使父级作业规范更明确的一种方便。正如launch的文档突出显示here一样,显式指定的父作业优先于上下文中指定的作业。该指南的this section中给出了有关如何使用它的实际示例。

07-26 04:49