我今天开始在Android上使用Kotlin协同程序,我注意到Anko有一套自己的辅助方法。我理解为什么asReference()
存在,但我无法弄清楚bg()
为什么会这样做,因为核心协程lib已经有async()
。
bg()
代码非常简单,内部使用async()
:
@PublishedApi
internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), "bg")
inline fun <T> bg(crossinline block: () -> T): Deferred<T> = async(POOL) {
block()
}
那么使用bg()
代替async()
有什么好处?对于Android应用,async()
在某种程度上效率低下吗?
答案 0 :(得分:2)
如您所见,bg
使用POOL
作为其CoroutineDispatcher
,请阅读here。
基本上,此函数仅用于包装执行这些任务的池。直接使用async
会要求您提供一个。因此,最终,通过bg
启动的每个任务都可以在同一个池中执行。
答案 1 :(得分:0)
我认为使用bg
没有任何好处。加上Anko将你绑定到旧版本的kotlinx协同程序库,所以我不打算使用它。