私は簡単なプログラムを持っています:
import scalaz._
import stream._
object Play extends App {
val in1 = io.linesR("C:/tmp/as.txt")
val in2 = io.linesR("C:/tmp/bs.txt")
val p = (in1 merge in2) to io.stdOutLines
p.run.run
}
ファイルas.txt
には 5 つa
の が含まれており、ファイルbs.txt
には 3 つの が含まれていますb
。次のような出力が表示されます。
a
b
b
a
a
b
a
a
a
ただし、次のように宣言を変更するとin2
:
val in2 = io.stdInLines
次に、予期しない動作だと思うものを取得します。ドキュメント1によると、プログラムは、どちらのストリームがより速く供給できるかに応じて、各ストリームから非決定論的にデータをプルする必要があります。これは、一連の s がすぐにコンソールに表示されることを意味しますa
が、これはまったく発生しません。
確かに、 を押すまでENTER
何も起こりません。次の要素を取得するストリームをランダムに選択し、そのストリームがブロックされていた場合、マージされたプロセスもブロックされた場合 (他のストリームにデータが含まれていても)。
何が起こっている?
1 - わかりました。文書はほとんどありませんが、 Dan Spiewakは講演の中で、最初にデータを提供した人は誰でもと非常に明確に述べまし