普通的回调函数:
interface Result<T> {
fun onSuccess(t: T)
fun onFailed(e: Exception)
}
回调方法,模拟耗时操作
fun longTimeMethod(result: Result<String>) {
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<String> {
override fun onSuccess(t: String) {
if (it.isCancelled) return
it.resume(t)
}
override fun onFailed(e: Exception) {
it.resumeWithException(e)
}
})
}
网友评论