问题标签 [kotlinx.coroutines.channels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1091 浏览

kotlin - 如何清除协程 Channel 发送的值?

假设我在频道中发送了一些值,

我怎样才能“清除”它们?意思是在不使用它们的情况下消耗它们

0 投票
1 回答
307 浏览

kotlin - 生产与频道()

试图了解渠道。我想对 android BluetoothLeScanner 进行通道化。为什么会这样:

但不是这个:

它会告诉我Channel was closed何时想offer第一次打电话。

EDIT1:根据文档:The channel is closed when the coroutine completes.这是有道理的。我知道我们可以使用suspendCoroutinewithresume进行一次性替换callback。然而,这是一个监听器/流的情况。我不希望协程完成

0 投票
2 回答
1780 浏览

android - 如何测试 Kotlin 协程演员

我已经在官方kotlinx.coroutines 文档中实现了一个演员。现在我必须在我的仪器测试中测试它们,但我总是得到

这是我的测试代码:

这是演员:

我的依赖:

我已经尝试过GlobalScope.actor<CounterMsg>(Dispatchers.Unconfined)至少将第一个测试变为绿色,但异常测试仍然失败。

0 投票
1 回答
511 浏览

kotlin - 是否有与 RxJava 的 onDispose 等效的 Kotlin Coroutines Channel?

如果我Observable<>在 RxJava 中扩展 an,我可以覆盖OnDispose()并执行清理,例如为垃圾收集器清除东西。

OnDispose()每当处理对此的任何订阅时都会调用Observable<>

但是,我似乎找不到任何与协程通道等效的东西。

我知道 channel.close(),但这不一样。

有什么方法可以传播吗

  • 暂停对 Channel 的协程取消;或者
  • 订阅处置/取消频道?
0 投票
3 回答
18244 浏览

android - 如何将项目发送到 Kotlin.Flow(如 Behaviorsubject)

我想知道如何向 a 发送/发送项目Kotlin.Flow,所以我的用例是:

在 consumer/ViewModel/Presenter 中,我可以使用以下功能订阅collect

但问题在于Repository,使用 RxJava,我们可以使用Behaviorsubject将其公开为 anObservable/Flowable并发出如下新项目:

但是每当我建立一个新流程时:

我只能收集。如何将值发送到流?

0 投票
1 回答
218 浏览

kotlin - Producer api can't be resolved

I am learning Kotlin coroutines. I followed a tutorial which uses this code to explain the producer consumer api of coroutines:

#xA;

My build.gradle :

#xA;

I tried the code on my Intellij IDE. But I constantly get compiler error "Unresolved reference ProducerJob" and "Unresolved reference produce", why is that?

0 投票
1 回答
1109 浏览

select - onReceiveOrClosed:已经恢复

采取以下程序:

运行它会给出以下输出:

我希望只看到一行,并且我希望不会看到任何异常(但当然,鉴于给定的块被执行两次Selected value Closed(null),异常是有意义的)。onReceiveOrClosed

我的理解onReceiveOrClosed不正确还是这是一个错误onReceiveOrClosed

我正在使用 Kotlin 1.3.50 和kotlinx-coroutines-core:1.3.1. 完整示例可在此处获得:https ://github.com/frececroka/kotlin-select-onreceiveorclosed 。

0 投票
1 回答
416 浏览

kotlin - 如何使用 Kotlin 协程抓取递归结构?

给定一个树状结构,以及一个获取节点子节点的操作,例如:

你知道实现具有签名的爬虫功能的蓝图吗

使用 Kotlin 协程返回树的所有节点?

0 投票
4 回答
1661 浏览

android - 有时,ConflatedBroadcastChannel 会在没有任何操作的情况下触发最近的值

在 Google 的关于advanced-coroutines-codelabConflatedBroadcastChannel示例的官方代码实验室中,他们曾经观察变量/对象的变化

我在我的一个副项目中使用了相同的技术,当恢复监听活动时,有时会ConflatedBroadcastChannel触发它的最近值,导致flatMapLatestbody 的执行没有任何变化。

我认为这是在系统收集垃圾时发生的,因为我可以通过System.gc()从另一个活动调用来重现此问题。

问题

这是代码

MainActivity.kt

主视图模型.kt

详细活动.kt

这是完整的源代码: CoroutinesFlowTest.zip

  • 为什么会这样?
  • 我错过了什么?
0 投票
1 回答
314 浏览

kotlin - 将流值发送/发送到 BroadcastChannel

今天一直被 Kotlin 流/通道的问题所困扰。本质上,我想获取从流中发出的值,并立即将它们发送到通道中。然后,我们通过公开的方法以流的形式订阅该频道。这里的用例是拥有一个始终在线的频道订阅和一个可以独立打开和关闭的流。

我在这里的简单用例是一个返回 channelFlow 的轮询器。理想情况下,我可以在 collect 方法中向通道发射。这似乎不起作用。我的菜鸟协程的想法是,因为收集和发送正在暂停,所以排放在收集中被暂停,我们被卡住了。

是否有任何用于流或通道的内置函数可以处理此行为或以任何其他方式实现此行为?