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

普通的回调函数:

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)
                }

            })
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容