I am learning TPL dataflow. I tried creating a sample where I am posting some values from different Task
s and expecting the result back in the same Task
to process it further. But the result is coming wrong. Following is my code. Let me know what wrong I am doing and how to resolve it.
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();
}
Result varies each time but once it came like this:
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