暂停功能中写入或不暂停的协程/恢复的区别是什么

时间:2020-01-21 02:50:53

标签: kotlin kotlin-coroutines

以下功能有何不同?

suspend fun doSomething1():Boolean{
  val res = longtimeFunction()
  return res
}
suspend fun doSomething2():Boolean = suspendCoroutine{ continuation->
  val res = longtimeFunction()
  continuation.resume(res)
}

1 个答案:

答案 0 :(得分:2)

没有区别,因为这不是您使用suspendCoroutine的方式。为了实现挂起的非阻塞行为,首先,您需要一个不执行阻塞调用的API,而是要有一个方法来启动操作并立即返回,但需要您执行 callback 将会通知结果。例如:

suspend fun doSomething2() = suspendCoroutine<Boolean> { continuation ->
    asyncLongtimeFunction(object: Callback {
        override fun onSuccess(res: Boolean) {
           continuation.resume(res)
        }
    })
}