android - 当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 调用的代码?
解决方案
推荐阅读
- javascript - 如何在本地使用 javascript 从 html5 解析 XML 文件
- python - 从包含品牌和型号名称的 Pandas 列表创建分类的 DataFrame
- powerdesigner - 当我不希望它们移动时,PowerDesigner 参考符号会自动对齐
- azure-data-factory-2 - 查看数据工厂 v2 调试运行的解决方法
- angular - 如果未选中复选框,则设置复选框验证
- com - “SafeArray 无法封送至此数组类型”错误
- c# - LINQ:用正文编写表达式以返回 IQueryable
- excel - 从方阵中选择列向量的函数
- javascript - 在 IndexedDb 中的游标外访问游标中设置的变量
- css - CSS等价于