协程作用域构造函数内的协程上下文的 Kotlin 组合

Fra*_*oni 1 kotlin kotlin-coroutines

这段代码到底在做什么?

private val supervisorJob = SupervisorJob()
protected val presenterScope = CoroutineScope(Dispatchers.Main + supervisorJob)
Run Code Online (Sandbox Code Playgroud)

结果是什么Dispatchers.Main + supervisorJob?我知道它一定是某种组合,但它是如何工作的呢?它怎么称呼?谢谢

Ale*_*hin 5

这是很多问题。

这段代码到底在做什么?

您可以如下查看:此代码创建一个新的CoroutineScope,并将调度程序设置为Main和 并将行为设置为SupervisorJob

Dispatchers.Main意味着协程将在主线程上执行。通常这是指 Android UI 线程。

SupervisorJob这意味着与常规Job行为不同,当其中一个孩子的失败也会让父母以及所有其他孩子失败时,工作将照常继续。

Dispatchers.Main +supervisorJob 的结果是什么?

结果是CoroutineContext。您可以将其视为不同键值的哈希图。

我知道它一定是某种组合,但它是如何工作的呢?

你是对的。如果您查看CoroutineContext实现,您会发现它实现了operator fun plus,它允许使用+组合两个类型的对象CoroutineContext

它怎么称呼?

通常协程方法是CoroutineScope. 如果我们看一下async(),例如:

public fun <T> CoroutineScope.async(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> T
): Deferred<T>
Run Code Online (Sandbox Code Playgroud)