从CoroutineContext
这样的构建器函数创建协程时,我们可以提供可选的launch
。
launch(Dispatchers.Unconfined) { // not confined -- will work with main thread
println("Unconfined : I'm working in thread ${Thread.currentThread().name}")
delay(500)
println("Unconfined : After delay in thread ${Thread.currentThread().name}")
}
其中一个值为Dispatchers.Unconfined
。我以为Dispatchers.Unconfined
将从CoroutineContext
继承而来。但是以一种非常复杂的方式,对我来说不是很清楚。添加了类层次结构的屏幕截图。
它继承自CoroutineContext.Element
。这是CoroutineContext
内部的嵌套接口。此嵌套接口继承了外部/父接口,CoroutineContext
的所有有用实现都实现了此嵌套接口。
我不确定为什么要使用这种机制或在其他地方使用这种模式。嵌套接口AFAIK只能用于创建新的命名空间,例如Map.Entry
。官方文档也说得很少,
/**
* An element of the [CoroutineContext]. An element of the coroutine context is a singleton context by itself.
*/
不确定An element of the coroutine context is a singleton context by itself.
是什么意思。
我知道这是一个好奇心问题。因此不需要及时的响应。但任何帮助将不胜感激。
答案 0 :(得分:1)
协程上下文是一组元素。协程上下文的元素本身就是单例上下文。这意味着,当将其视为一个集合(作为协程上下文)时,一个元素表示一个单元素集合(又称为单例)。