また TPL Dataflow の話です。突然ですが、バッファのない PropagatorBlock って欲しくないですか?
例えば、複数の SourceBlock があって、それをひとつの SourceBlock として返したいとき。
ISourceBlock<T> CreateSource()
{
IEnumerable<ISourceBlock<T>> sources = ;
var resultBlock = new BufferBlock<T>(new DataflowBlockOptions() { BoundedCapacity = 1 });
foreach (var s in sources) s.LinkTo(resultBlock);
return resultBlock;
}
どうでしょう? resultBlock
は、1件はバッファに持ってしまうので、後段のブロックがどうであれ、ソースからは必ず1件多く取り出されてしまいます。
1件くらいいいじゃない? それは sources
次第でしょう。
というわけで、本題のバッファのない PropagatorBlock が欲しい、ということです。もし resultBlock
にバッファがなければ、 CreateSource
の戻り値を利用する(リンクする)とき、初めて sources
からデータが取り出されます。やりたいですね。
続きを読む