首页 > 解决方案 > 当ChannelResult为channelResult = Value(失败)时如何重试kotlin通道trySend

问题描述

我当前的 Android 应用程序使用了一个演员:-

private val _reactions = MutableSharedFlow<Reaction>(replay = 0, extraBufferCapacity = 3, onBufferOverflow = BufferOverflow.DROP_OLDEST)
val reactions: SharedFlow<Reaction> = _reactions

private val actor = scope.actor<Action> {
    channel.consumeEach { action ->
        _reactions.tryEmit(reduce(action = action))
    }
}

消息通过此方法发送:-

fun send(action: Action) {
    val channelResult = actor.trySend(action)
}

我有一个间歇性错误情况,当应用程序打开“Cold”时,第一次调用会send(action: Action)导致 ChannelResult = Failed,如这些 logcat 日志所示

2021-10-13 13:42:58.184 7291-7291: channelResult = Value(Failed)
2021-10-13 13:42:58.184 7291-7291: channelResult isClosed = false
2021-10-13 13:42:58.184 7291-7291: channelResult isFailure = true
2021-10-13 13:42:58.185 7291-7291: channelResult isSuccess = false

在这些情况下,我想自动重试(带退避)我看不到任何相关的方法来支持这种方法

如何编写重试 trySend 调用的代码?

标签: androidkotlinchannel

解决方案


推荐阅读