我在这个初始网络中使用了 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:此块只能用于
1.System.Threading.Tasks.Dataflow.ITargetBlock<T>.OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock
在 System.Threading.Tasks.Dataflow.Internal.SourceCore 1 目标的 System.Threading.Tasks.Dataflow.DataflowBlock.FilteredLinkPropagator 1 源(布尔型 consumeToAccept)中创建它的源,1.OfferMessageToTarget(DataflowMessageHeader header, TOutput message, ITargetBlock
布尔型& messageWasAccepted) 在 System.Threading.Tasks.Dataflow.Internal.SourceCore1.OfferToTargets(ITargetBlock
1 linkToTarget) 在 System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore()