我正在调查当前Android项目中频道的使用情况。
我的viewModel具有以下方法:
private val completed: CompletableDeferred<Reaction<NetworkResponse>> = CompletableDeferred()
private val mutex = Mutex()
@ExperimentalCoroutinesApi
fun perform(action: Action): ReceiveChannel<Reaction<NetworkResponse>> =
produce {
if (mutex.isLocked) cancel()
if (completed.isCompleted) {
send(completed.getCompleted())
} else {
mutex.withLock {
repository.perform(action).also { reaction ->
completed.complete(reaction)
send(reaction)
}
}
}
}
我已经使用mutex
和CompletableDeferred
来确保只向网络拨出一次。
这是有效的方法吗?
有没有更好的方法来达到我想要的结果?