【kotlin】suspendCancellableCoroutine

像suspendCoroutine一样挂起协程,但为闭包提供一个CancelableContinuation。如果协程的Job在挂起时被取消或完成,此函数将抛出CancellationException 。
此函数的典型用途是在等待单次回调 API 的结果时暂停协程并将结果返回给调用者。

suspendCancellableCoroutine 函数会挂起当前协程,并给出一个 continuation 对象;直到调用 continuation.resume 恢复协程,或者抛出异常。

用例

使用 suspendCancellableCoroutine 将一个回调函数转换成具有返回值的挂起函数。

fun someCallbackFun(callback: (Result) -> Unit) {
    // do something
    callback(result)
}

@OptIn(ExperimentalCoroutinesApi::class)
suspend fun convertCallbackFunToSuspendFunWithReturn(): Result {
    return suspendCancellableCoroutine { continuation ->
        someCallbackFun { result ->
            continuation.resume(result) { /* on coroutine cancelled */ }
        }
    }
}

https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/suspend-cancellable-coroutine.html

https://www.jianshu.com/p/de4f8c1afaf6

你可能感兴趣的:(【kotlin】suspendCancellableCoroutine)