【发布时间】:2019-08-06 07:47:48
【问题描述】:
目前在我的代码库中,使用Kotlin,我有一个扩展函数,它以下列方式工作。
async {
executeSomeCodeToGetResult()
}.awaitOnUiThread { result ->
useResultOnUiThread(result)
}
async 函数将一个 runnable 加载到一个 ExecutorService 上,该 ExecutorService 返回一个 Future<T> 结果。 awaitOnUiThread 是 Future<T> 对象的扩展函数,它将 T 作为参数发送到输入函数。
我想知道是否有办法使用Kotlin coroutines 来实现类似的结果?
我确实实现了这样的东西,但我没有得到很好的性能结果。也许我在 GlobalScope 上运行 await() 函数时做错了什么?
private const val threadPoolSize = 4
@ObsoleteCoroutinesApi
val scope = CoroutineScope(newFixedThreadPoolContext(threadPoolSize, "async-runner"))
@ObsoleteCoroutinesApi
fun <T> async(function: () -> T): Deferred<T> {
return scope.async { function() }
}
fun <T> Deferred<T>.awaitOnUiThread(function: (T) -> Unit) {
val deferred = this
GlobalScope.launch {
val result: T = deferred.await()
Handler(Looper.getMainLooper()).post {
function(result)
}
}
}
【问题讨论】:
标签: android kotlin kotlin-coroutines