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:此块只能用于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.SourceCore 1.OfferToTargets(ITargetBlock1 linkToTarget) 在 System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore()

4

1 回答 1

1

“c”TransformBlock 之一出现故障。当一个块出现故障时,它不会自动从网络断开链接。添加完成任务以取消链接块似乎可以解决此问题。

于 2012-05-14T15:17:33.007 回答