【kotlin】suspendCancellableCorout
2022-09-15 本文已影响0人
littlefogcat
像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 */ }
}
}
}