2

我今天开始在 Android 上使用 Kotlin 协程,我注意到 Anko 有一套自己的辅助方法。我理解为什么asReference()存在,但我不知道为什么会存在,bg()因为核心协程库已经有了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()呢?async()Android应用程序在某种程度上效率低下吗?

4

1 回答 1

2

如您所见,bg用作POOL它的,在这里CoroutineDispatcher阅读它。

基本上这个函数只存在于包装执行这些任务的池中。直接使用async需要您提供一个。所以最后,bg确保通过的每个任务都在同一个池中执行。

于 2017-11-16T09:52:45.613 回答