我不了解协程构造函数的语法。

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运算符返回另一个CoroutineContextDispatchers.MainJob实现了CoroutineContext接口(interface)。

就是说,Dispatchers.Main + viewModelJob是对plus的调用,该调用构造了另一个CoroutineContext。在内部,这导致两个实例的集合。

08-26 01:30