using System.Threading.Tasks;
using System.Net.Http;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks.Dataflow;
namespace task
{
class Program
{
static void Main(string[] args)
{
IPropagatorBlock<int, int> test = CreateMyCustomBlock();
test.Post(2);
Console.WriteLine(test.Receive().ToString()); //结果为3
Console.ReadKey();
}
//创建自己的数据流块
static IPropagatorBlock<int, int> CreateMyCustomBlock()
{
var multiplyBlock = new TransformBlock<int, int>(item => item * 2);
var addBlock = new TransformBlock<int, int>(item => item + 2);
var divideBlock = new TransformBlock<int, int>(item => item / 2);
var flowCompletion = new DataflowLinkOptions { PropagateCompletion = true };
multiplyBlock.LinkTo(addBlock, flowCompletion);
addBlock.LinkTo(divideBlock, flowCompletion);
return DataflowBlock.Encapsulate(multiplyBlock, divideBlock);
}
}
}
通过使用Encapsulate 方法,可以取出数据流网格中任何具有单一输入块和输出块的部分。
Encapsulate 方法会利用这两个端点,创建一个单独的数据流块。开发者得自己负责端点
之间数据的传递以及完成情况
参考书籍: C#并发编程经典实例