Android中的Kotlin协程:为什么使用Anko的bg()而不是async()?

时间:2017-11-16 09:32:30

标签: android kotlin kotlinx.coroutines anko

我今天开始在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()在某种程度上效率低下吗?

2 个答案:

答案 0 :(得分:2)

如您所见,bg使用POOL作为其CoroutineDispatcher,请阅读here

基本上,此函数仅用于包装执行这些任务的池。直接使用async会要求您提供一个。因此,最终,通过bg启动的每个任务都可以在同一个池中执行。

答案 1 :(得分:0)

我认为使用bg没有任何好处。加上Anko将你绑定到旧版本的kotlinx协同程序库,所以我不打算使用它。