Kotlin 添加“时,协同程序之间的通信中断”;Flow.scan();链

Kotlin 添加“时,协同程序之间的通信中断”;Flow.scan();链,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我有几个通过渠道沟通的合作项目,我有一些项目没有到达其中一个。看起来每当我引入scan操作符时,就会出现这种情况 我将情况提炼为这个“最小”的例子: runBlocking{ val信号=广播信道(容量=信道缓冲) val外部值=广播频道(容量=频道缓冲) 发射{ signals.asFlow() 奥纳赫先生{ println(“接收信号,发射值”) extraValues.send(33);extraValues.send(44) } .collect() } 发射{ 合并(extraValu

我有几个通过渠道沟通的合作项目,我有一些项目没有到达其中一个。看起来每当我引入
scan
操作符时,就会出现这种情况

我将情况提炼为这个“最小”的例子:

runBlocking{
val信号=广播信道(容量=信道缓冲)
val外部值=广播频道(容量=频道缓冲)
发射{
signals.asFlow()
奥纳赫先生{
println(“接收信号,发射值”)
extraValues.send(33);extraValues.send(44)
}
.collect()
}
发射{
合并(extraValues.asFlow(),flowOf(2,3))
.scan(1,{acc,v->v})
.收集{
println(“收到$it”)
如果(it==1){
信号。报价(单位)
}
}
}
}
上面的代码打印:

received 1
received signal, emitting values
received 2
received 3
因此,
33
44
被发出,但从未被接收

现在,如果我让
flow of(1,2,3)
发出
1
,然后删除
scan
,一切都会正常工作:

    // ... code above unchanged ...
    merge(extraValues.asFlow(), flowOf(1, 2, 3)) // <- added 1
      // <- removed scan
      .collect {
        println("received $it")
        if (it == 1) {
          signals.offer(Unit)
        }
      }
有人能解释一下这里发生了什么,我能做些什么使带有
scan
的版本工作并接收
extraValues
发出的值吗

received 1
received 2
received 3
received signal, emitting values
received 33
received 44