我不了解协程构造函数的语法。
private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
我知道参数需要协程上下文类。 我不明白的是如何添加两个不同的对象? Dispatchers.Main类是MainCoroutineDispatcher 并且viewModelJob类是Job。 有什么解释吗?
答案 0 :(得分:2)
CoroutineScope
不是构造函数,而是一个函数,定义为:
public fun CoroutineScope(context: CoroutineContext): CoroutineScope = ...
该参数是接口CoroutineContext
,该接口本身定义了加号运算符:
public operator fun plus(context: CoroutineContext): CoroutineContext = ...
plus
运算符返回另一个CoroutineContext
。 Dispatchers.Main
和Job
实现了接口CoroutineContext
。
也就是说,Dispatchers.Main + viewModelJob
是对plus
的调用,它构成了另一个CoroutineContext
。在内部,这导致两个实例的集合。