【发布时间】:2016-03-28 03:08:38
【问题描述】:
我正在学习 TPL 数据流。我尝试创建一个示例,在其中发布来自不同Tasks 的一些值,并期望将结果返回到相同的Task 中以进一步处理它。但结果是错误的。以下是我的代码。让我知道我做错了什么以及如何解决它。
static void Main(string[] args)
{
var transBlock = new TransformBlock<int, int>
(
n =>
{
Thread.Sleep(1000);
return (n*2);
}
);
new Task(() =>
{
var result = transBlock.Post(2);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 2 is {0}", val));
}).Start();
new Task(() =>
{
var result = transBlock.Post(3);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 3 is {0}", val));
}).Start();
new Task(() =>
{
var result = transBlock.Post(4);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 4 is {0}", val));
}).Start();
new Task(() =>
{
var result = transBlock.Post(5);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 5 is {0}", val));
}).Start();
new Task(() =>
{
var result = transBlock.Post(6);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 6 is {0}", val));
}).Start();
new Task(() =>
{
var result = transBlock.Post(7);
var val = transBlock.Receive();
Console.WriteLine(string.Format("double for 7 is {0}", val));
}).Start();
Console.ReadLine();
}
每次结果都不一样,但一旦出现如下:
double for 5 is 8
double for 4 is 6
double for 3 is 4
double for 2 is 10
double for 6 is 12
double for 7 is 14
【问题讨论】:
标签: c# task-parallel-library reactive-programming tpl-dataflow dataflow