如何在挂起的协程流中使用回调?

How to use callback from within a suspended coroutine flow?

我正在使用协程流,我需要从非暂停回调中调用暂停发射。我无法控制回调,也无法暂停该接口方法。可以这样做吗?

import kotlinx.coroutines.flow.flow

fun foo() = flow {
    someLibraryObject.listenToSomeEvent(object: SomeCallback {
        override fun bar() {
            emit("Some result")
        }
    }
}

interface SomeCallback {
   fun bar()
}
在这种情况下可以使用

callbackFlow。请注意,它目前处于试验阶段。

fun foo() = callbackFlow {
    someLibraryObject.listenToSomeEvent(object: SomeCallback {
        override fun bar() {
             offer("Some result")
        }
    }
}

详情请参考this