这段代码到底在做什么?
private val supervisorJob = SupervisorJob()
protected val presenterScope = CoroutineScope(Dispatchers.Main + supervisorJob)
Dispatchers.Main + supervisorJob
的结果是什么?我了解它一定是某种组合,但是它如何工作?怎么称呼它?
谢谢
答案 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>