【发布时间】:2018-10-23 06:09:58
【问题描述】:
我最近开始研究 Kotlin 协程 由于我使用了很多 Google 的库,所以大部分工作都是在 Task 类中完成的
目前我正在使用这个扩展来暂停协程
suspend fun <T> awaitTask(task: Task<T>): T = suspendCoroutine { continuation ->
task.addOnCompleteListener { task ->
if (task.isSuccessful) {
continuation.resume(task.result)
} else {
continuation.resumeWithException(task.exception!!)
}
}
}
但最近我看到了这样的用法
suspend fun <T> awaitTask(task: Task<T>): T = suspendCoroutine { continuation ->
try {
val result = Tasks.await(task)
continuation.resume(result)
} catch (e: Exception) {
continuation.resumeWithException(e)
}
}
有什么区别,哪一个是正确的?
UPD:第二个示例不起作用,我知道为什么
【问题讨论】:
标签: android kotlin kotlin-coroutines