Android中的Kotlin协程:为什么要使用Anko中的bg()而不是async()?
我今天开始在Android上使用Kotlin协同程序,并且注意到Anko对它们有一套自己的辅助方法。 我明白为什么asReference()
存在,但我不明白为什么bg()
asReference()
,因为核心协程库lib已经具有async()
。
bg()
代码非常简单,它内部使用async()
:
@PublishedApi internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), "bg") inline fun bg(crossinline block: () -> T): Deferred = async(POOL) { block() }
那么使用bg()
而不是async()
的优点是什么? 对于Android应用程序, async()
效率低下吗?
正如你所看到的, bg
使用POOL
作为它的CoroutineDispatcher
, 在这里阅读它。
基本上这个函数只存在于执行这些任务的池中。 直接使用async
将需要您提供一个。 所以最后,通过bg
开始的每个任务都保证在同一个池中执行。
我不认为使用bg
有任何优势。 再加上Anko将你连接到kotlinx协同程序库的旧版本,所以我不打扰使用它。