Kotlin Coroutines ::忽略后续协程调用的“最佳实践”

时间:2019-11-28 11:07:17

标签: kotlin kotlin-coroutines

我正在调查当前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)
                }
            }
        }
    }

我已经使用mutexCompletableDeferred来确保只向网络拨出一次。

这是有效的方法吗?

有没有更好的方法来达到我想要的结果?

0 个答案:

没有答案