この初期ネットワークで TPL データフローを使用しています。
(a)CustomSource => (b)TransformBlock
メッセージが b に到着すると、b はフィルターを使用して新しい変換ブロックを作成し、それをそれ自体に追加します (各メッセージに対しては行いません)。
ネットワークは次のようになります。
(a)CustomSource => (b)TransformBlock => (c with linkto filter)TransformBlock
数回実行すると、ネットワークは次のようになります。
(a)CustomSource => (b)TransformBlock
=> (c with linkto filter)TransformBlock
=> (c with another linkto filter)TransformBlock
=> (c with another linkto filter)TransformBlock
これはうまく機能し、「スイッチ」ブロックのデフォルトアクションを取得するために私が見つけた唯一のソリューションです。
ただし、customSource.Complete() を呼び出してソースが完成すると、例外がスローされます。
ArgumentException: このブロックは、System.Threading.Tasks.Dataflow.DataflowBlock.FilteredLinkPropagator で作成されたソースでのみ使用する必要があります
1.System.Threading.Tasks.Dataflow.ITargetBlock<T>.OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock
。System.Threading.Tasks.Dataflow.Internal.SourceCore で1.OfferMessageToTarget(DataflowMessageHeader header, TOutput message, ITargetBlock
1 つのターゲット、ブール値& messageWasAccepted) で System.Threading.Tasks.Dataflow.Internal.SourceCore1.OfferToTargets(ITargetBlock
1 linkToTarget) で System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore() で