该块只能与创建它的源一起使用

时间:2012-05-09 07:20:25

标签: .net task-parallel-library tpl-dataflow

我正在使用这个初始网络的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.SourceCore 1.OfferMessageToTarget(DataflowMessageHeader header, TOutput message, ITargetBlock 1 target,Boolean&amp; messageWasAccepted)          在System.Threading.Tasks.Dataflow.Internal.SourceCore 1.OfferToTargets(ITargetBlock 1 linkToTarget)          在System.Threading.Tasks.Dataflow.Internal.SourceCore`1.OfferMessagesLoopCore()

1 个答案:

答案 0 :(得分:1)

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