CoroutineScope(Dispatchers.IO + Job()) 和 CoroutineScope(Dispatchers.IO) + Job() 的区别

问题描述 投票:0回答:1

我想知道这两种创建范围的方式有什么区别?

1:

val scope1 = CoroutineScope(Dispatchers.IO + Job()) 

2

val scope2 = CoroutineScope(Dispatchers.IO) + Job()

我注意到它都创建了 1 个 CoroutineScope。这两种创建方式有什么区别吗?

android kotlin
1个回答
0
投票
  1. CoroutineScope(Dispatchers.IO + Job())

这将创建一个带有 Dispatchers.IO 调度程序和新作业的新 CoroutineScope。在这种情况下,作业与范围直接关联。这意味着取消此作业将取消在此范围内启动的所有协程。

`val scope = CoroutineScope(Dispatchers.IO + Job())`

Job 和 Dispatcher 相结合:Job 实例在创建范围时作为上下文的一部分添加。

生命周期:在此范围内启动的协程的生命周期与该特定作业相关。您可以完全控制此作业的取消、完成等。

2.CoroutineScope(Dispatchers.IO) + Job()

这仅使用 Dispatchers.IO 创建一个 CoroutineScope。然后您尝试单独添加 Job() 。但是,这并不能按预期工作,因为您实际上并未将作业与 CoroutineScope 关联起来。相反,您只是创建一个与原始范围无关的新作业。

val scope = CoroutineScope(Dispatchers.IO) + Job()

Separate Job:以这种方式创建的Job不链接到CoroutineScope。因此,您无法通过作业获得范围取消的预期行为。 误导:这不会达到与第一个选项相同的效果。在外部添加 + Job() 并不会改变 CoroutineScope 最初创建时没有 Job 的事实。

© www.soinside.com 2019 - 2024. All rights reserved.