【问题标题】:What is the difference between CoroutineContext and Job in kotlinx.coroutines?kotlinx.coroutines 中的 CoroutineContext 和 Job 有什么区别?
【发布时间】:2018-05-21 06:15:26
【问题描述】:

kotlinx.coroutines 库中,所有协程构建器(如launchasync 等)都采用CoroutineContext 参数,但还有一个额外的parent 参数,其类型为JobCoroutineContextJob有什么区别?

【问题讨论】:

    标签: kotlin coroutine kotlin-coroutines


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2014-05-22
      • 2017-06-14
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多