我今天开始在 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()
有什么优势呢?对于 Android 应用程序来说,async()
是否在某些方面效率低下?
最佳答案
如您所见,bg
使用 POOL
作为其 CoroutineDispatcher
,请阅读 here 。
基本上这个函数的存在只是为了包装执行这些任务的池。直接使用async
需要您提供一个。所以最终,通过bg
启动的每个任务都保证在同一个池中执行。
关于android - Android 中的 Kotlin 协程 : Why use bg() from Anko instead of async()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47326022/