如何使回调流主安全?



在我的ViewModel中,我必须调用一个公开callbackFlow的存储库函数。

通常我会让repo类中的suspend函数将它们的代码块包装在a中withContext(Dispatcher.IO) { }块。或者,如果我想使流主安全,我也可以使用.flowOn()操作符,但该api不可用于callbackFlows。

所以我的问题是"我如何使用回调流主安全?"…假设它们不是现成的

callbackFlow是一个生成器函数,它创建一个冷Flow:

fun doWork(): Flow<String> = callbackFlow<String> {
// ...
}

创建的Flow可以安全地从任何协程中使用:

coroutineScope.launch {
doWork().collect {}
}

您还可以使用flowOn()函数来更改执行该流的上下文:

coroutineScope.launch {
doWork().flowOn(Dispatchers.IO).collect {}
}