私は(F#で記述されたが、Scalaのバージョンが異なると一致していない)アッカストリームのための簡単なテストコードを持っている:なぜKeep.NoneはAkkaストリームの実行結果に影響しませんか?
var source = Source.From(Enumerable.Range(1, 3));
var flow = Flow.FromFunction(new Func<int, string>(x => (x * 2).ToString()));
var sink = Sink.ForEach<string>(output.Add);
var runnable = source.Via(flow).To(sink);
経由のヘルパーメソッドがViaMaterializedのためだけのショートカットですので(、Keep.Leftフロー)私はこのようなコードを書き換えることができます。
var source = Source.From(Enumerable.Range(1, 3));
var flow = Flow.FromFunction(new Func<int, string>(x => (x * 2).ToString()));
var sink = Sink.ForEach<string>(output.Add);
var runnable = source.ViaMaterialized(flow, Keep.Left).To(sink);
は(左、右、両方またはNone)プロパティをキープストリーム動作の指定された側の値を保存すべきであるストリームmaterializerを伝えます。しかし、Keep.LeftをKeepに変更すると気付きます。Right、Keep。どちらか、またはKeepを保持します。実行結果の何も変更しません。シンクは常にフロー変換関数に従って出力を受け取ります。
私は、値が確実にシンクに送られるようにするには、ストリームグラフのFlowステージにNone以外の値を使用する必要があると考えました。私はこのことの意味を誤解しているに違いないので、私の質問は、両面で物質化が無効になっていてもストリームフローが機能する理由です。 Left、Right、Both、Noneの間でKeep値を変更すると、シンクに到達する値に影響を与える例を挙げることができますか?
これらのコードスニペットはF#ではなくC#にあります。 –