Android使用suspendCancellableCorou

2021-03-03  本文已影响0人  Ello_Orld

普通的回调函数:

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

            })
        }
上一篇下一篇

猜你喜欢

热点阅读