C# ActionBlock能否链接到另一个包含更多参数的ActionBlock?

C# ActionBlock能否链接到另一个包含更多参数的ActionBlock?,c#,concurrency,task-parallel-library,.net-4.5,tpl-dataflow,C#,Concurrency,Task Parallel Library,.net 4.5,Tpl Dataflow,我仍然掌握着第三方物流数据流的窍门,所以请容忍我 我的应用程序要求队列在保持其顺序的同时并行执行。这让我找到了数据流库以及我正在尝试做的事情。我想知道是否有一种方法可以将一个ActionBlock链接到另一个ActionBlock,第二个ActionBlock从第一个ActionBlock获取一个值进行操作。 伪示例: var block1 = new ActionBlock<ByteBuffer>(buffer => { // code generating a has

我仍然掌握着第三方物流数据流的窍门,所以请容忍我

我的应用程序要求队列在保持其顺序的同时并行执行。这让我找到了数据流库以及我正在尝试做的事情。我想知道是否有一种方法可以将一个ActionBlock链接到另一个ActionBlock,第二个ActionBlock从第一个ActionBlock获取一个值进行操作。
伪示例:

var block1 = new ActionBlock<ByteBuffer>(buffer => {
   // code generating a hash of the byte buffer to pass to next block 
    ulong hash = generateHash(buffer);
   // this is what i would like to pass to the next ActionBlock
    var tup = Tuple<ByteBuffer, ulong>(buffer, along);
}, dataFlowOpts);
var block2 = new ActionBlock<Tuple<ByteBuffer, ulong>(tup => {
    /* code to act on the buffer and hash */
}, dataFlowOpts);

block1.LinkTo(block2); // Is there something like this that would use the correct params?
var block1=新操作块(缓冲区=>{
//生成要传递到下一个块的字节缓冲区哈希的代码
ulong hash=generateHash(缓冲区);
//这就是我想传递给下一个ActionBlock的内容
var tup=Tuple(缓冲区,沿);
},dataFlowOpts);
var block2=新动作块{
/*作用于缓冲区和散列的代码*/
},dataFlowOpts);
区块1.链接到(区块2);//有这样的东西可以使用正确的参数吗?
我想做的事可能吗?这有意义吗?我之所以将它们分为两个
操作块
,是因为我想在另一个代码路径中重用block2(以不同方式散列不同
字节缓冲区的内容)


也许有更好的办法?实际上,我只是尝试在对象以并发方式进入时对其进行散列,同时保留FIFO顺序,因为同步散列这些对象的速度太慢。

只需使用
TransformBlock

var block1 = new TransformBlock<ByteBuffer, Tuple<ByteBuffer, ulong>>(buffer => {
    // code generating a hash of the byte buffer to pass to next block 
    ulong hash = generateHash(buffer);
    // this is what i would like to pass to the next ActionBlock
    return Tuple<ByteBuffer, ulong>(buffer, along);
}, dataFlowOpts);
var block2 = new ActionBlock<Tuple<ByteBuffer, ulong>(tup => {
    /* code to act on the buffer and hash */
}, dataFlowOpts);

block1.LinkTo(block2); // Is there something like this that would use the correct params?
var block1=新转换块(缓冲区=>{
//生成要传递到下一个块的字节缓冲区哈希的代码
ulong hash=generateHash(缓冲区);
//这就是我想传递给下一个ActionBlock的内容
返回元组(缓冲区,沿);
},dataFlowOpts);
var block2=新动作块{
/*作用于缓冲区和散列的代码*/
},dataFlowOpts);
区块1.链接到(区块2);//有这样的东西可以使用正确的参数吗?

或者,可能更好的选择是使用具有两个属性的DTO类:缓冲区和哈希,因为
Tuple
不太可读。另外,考虑一个新的关于命名元组的C语言特征。

你有没有看过使用RX -微软的反应框架?(NuGet“System.Reactive”)现在看起来很明显!非常感谢。