kotlin中將回撥改寫為協程

得兒得兒以得兒以得兒得兒發表於2020-12-26

我們可以將Guava的FutureCallback改造為掛起函式:

suspend fun <T> Future<T>.await(): T = suspendCoroutine {
    Futures.addCallback(this, object: FutureCallback<T> {
        override fun onSuccess(result: T?) {
            if (result != null) {
                it.resumeWith(Result.success(result))
            }
        }
 
        override fun onFailure(t: Throwable) {
            it.resumeWithException(t)
        }
    })
}

esumeWith傳遞執行結果,resumeWithExeption傳遞異常。

相關文章