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