我使用TPL数据流来创建它们通过输出到输出bufferBlock是否有一种惯用的方式来路由在TPL数据流图中的TransformBlock中失败的元素?
inputQueue = new BufferBlock<InputPacket>;
processQueue = new TransformBlock <InputPacket, OutputPacket>;
outputQueue = new BufferBlock<OutputPacket>;
inputQueue.LinkTo(processQueue, new DataflowLinkOptions { PropagateCompletion = true });
processQueue.LinkTo(outputQueue, new DataflowLinkOptions { PropagateCompletion = true });
是否有路径元件,其失败的惯用方式TransformBlock处理的输入元件的bufferBlock?
当InputPacket
要素齐全的加工,动作与 processQueue
关联将返回OutputPacket
将被路由到outputQueue
如果有processQueue
相关的动作调用一个不可靠webservice, 然后处理一些InputPacket
元素将超时, ,我想重试这些元素x次。但我不想立即尝试它们,我想将它们放回到输入队列中。
我希望能够路由InputPacket
元件,其 超时回到inputQueue
直到他们失败x
次,然后以failureQueue
:
BufferBlock<CallPacket> failureQueue = new BufferBlock<InputPacket>;
使用LinkTo
谓词由于涉及两种不同类型而变得复杂:
InputPacket OutputPacket
我看起来像我可以处理这种改变:
processQueue = new TransformBlock <InputPacket, ParentPacketType>;
,然后写谓词基于数据包的类型。
或
通过在inputElement输出存储作为InputPacket
成员,
但既不似乎良好的方式来实现这一点。
这个项目包含LinkSubTypeTo这似乎是为了这个目的:https://github.com/gridsum/DataflowEx –