Callback => Coroutine,使用Coroutine代替Callback

interface CoroutineCallback {
    fun onSuccess(num: Int)
    fun onFailure(e: Exception)
}

object CoroutineDemoUtils {
    fun getDemoData(callback: CoroutineCallback) {
        val num = Random.nextInt(0, 9)
        if (num >= 5) callback.onSuccess(num)
        else callback.onFailure(Exception("number > 5"))
    }
}

suspend fun getCoroutineDemoData(): Int =
    suspendCancellableCoroutine {
        CoroutineDemoUtils.getDemoData(object : CoroutineCallback {
            override fun onSuccess(num: Int) {
                it.resume(num)
            }

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

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

推荐阅读更多精彩内容