0

この初期ネットワークで 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, ITargetBlock1 つのターゲット、ブール値& messageWasAccepted) で System.Threading.Tasks.Dataflow.Internal.SourceCore 1.OfferToTargets(ITargetBlock1 linkToTarget) で System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore() で

4

1 に答える 1

1

「c」TransformBlockの1つに障害が発生しました。ブロックに障害が発生しても、ネットワークから自動的にリンクが解除されることはありません。ブロックのリンクを解除するために完了タスクを追加すると、この問題が修正されるようです。

于 2012-05-14T15:17:33.007 に答える