我使用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 –