在kotlinx.coroutines库中,所有协同构建器(如launch、async等)都接受CoroutineContext参数,但也有一个带有Job类型的附加parent参数。CoroutineContext和Job有什么区别?
发布于 2017-12-07 07:42:52
Job表示正在执行的协同线或某种聚合任务。Job是一个CoroutineContext.Element,这意味着它可以存储在coroutine上下文中。CoroutineContext是一个不同的协同上下文元素的集合,而job只是这样一个元素。
实际上,coroutine上下文更像是一个映射,因为您可以使用coroutine元素键从其中检索元素。例如,如果您有一个类型为ctx的值CoroutineContext,那么您可以使用ctx[Job]表达式从它检索作业。更详细的信息可以在协同设计文件和CoroutineContext文档的相应部分中找到。
启动新的协同线时,可以指定完整的上下文。如果此上下文包含作业,则相应的作业将成为新协同线的父任务。
协同构建器(如parent )的launch参数只是使父作业规范更加明确的一种方便。作为launch的文档,这里强调显式指定的父作业优先于上下文中指定的作业。指南的本节中给出了如何使用它的实际示例。
https://stackoverflow.com/questions/47689984
复制相似问题