协程范围构造函数内的协程上下文的Kotlin组成

时间:2020-01-03 14:58:59

标签: kotlin kotlin-coroutines

这段代码到底在做什么?

private val supervisorJob = SupervisorJob()
protected val presenterScope = CoroutineScope(Dispatchers.Main + supervisorJob)

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

1 个答案:

答案 0 :(得分:2)

很多问题。

这段代码到底在做什么?

您可以这样看:这段代码创建了一个新的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>