我正在使用这个初始网络的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
1 source,Boolean consumeToAccept) 在System.Threading.Tasks.Dataflow.Internal.SourceCore1.OfferMessageToTarget(DataflowMessageHeader header, TOutput message, ITargetBlock
1 target,Boolean&amp; messageWasAccepted) 在System.Threading.Tasks.Dataflow.Internal.SourceCore1.OfferToTargets(ITargetBlock
1 linkToTarget) 在System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore()
答案 0 :(得分:1)
其中一个“c”TransformBlock出现故障。当块出现故障时,它不会自动从网络中断开链接。添加完成任务以取消链接块似乎可以解决此问题。