Android使用suspendCancellableCoroutine将回调转换为协程

普通的回调函数:

interface Result {
    fun onSuccess(t: T)
    fun onFailed(e: Exception)
}

回调方法,模拟耗时操作

  fun longTimeMethod(result: Result) {
        thread {
            Thread.sleep(5000)
            if (System.currentTimeMillis() % 10 > 6) {
                result.onSuccess("${System.currentTimeMillis()}")
            } else {
                result.onFailed(Exception("FAILED"))
            }
        }
    }

去掉回调,转换为挂起函数:

 suspend fun getResult(): String =
        suspendCancellableCoroutine {
            longTimeMethod(object : Result {
                override fun onSuccess(t: String) {
                    if (it.isCancelled) return
                    it.resume(t)
                }

                override fun onFailed(e: Exception) {
                    it.resumeWithException(e)
                }

            })
        }

你可能感兴趣的:(Android使用suspendCancellableCoroutine将回调转换为协程)