android - Android 中的 Kotlin 协程 : Why use bg() from Anko instead of async()?

标签 android kotlin kotlinx.coroutines anko

我今天开始在 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/

相关文章:

java - Android MapView animateTo 和 ZoomIn 同时进行

java - GridView 获取触摸项目

Android Studio - Kotlin 项目的 "Unsolved reference"问题

kotlin - 从协程获取状态更新

kotlin - kotlin 协程是否会阻塞 IO 上的线程直至其完成?

android - 谷歌 IAP 错误 : Authentication is required

android - 动态创建 Runnable

java - 在 ListView 中实现搜索功能时出错

android - 存储库类中的协程范围

kotlin getparameters函数不起作用