Beispiel #1
0
        private static void Main(string[] args)
        {
            var rand = new Random(DateTime.Now.Millisecond);

            var telemetryClient = new TelemetryClient
            {
                InstrumentationKey = "c615d051-eefa-4d55-8e53-bdcdd5a92ff3"
            };

            DataflowMetric.TelemetryClient = telemetryClient;
            var broadcastBlock    = new BroadcastBlock <int>(null);
            var transformPositive = new TransformBlock <int, int>(x =>
            {
                using (new DataflowMetric("TransformPositive"))
                {
                    Task.Delay(rand.Next(200)).Wait();
                    return(x);
                }
            });
            var transformNegative = new TransformBlock <int, int>(x => {
                using (new DataflowMetric("TransformNegative"))
                {
                    Task.Delay(rand.Next(300)).Wait();
                    return(x * -1);
                }
            });

            var join     = new JoinBlock <int, int>();
            var sumBlock = new ActionBlock <Tuple <int, int> >(tuple =>
            {
                using (new DataflowMetric("SumBlock"))
                {
                    Console.WriteLine("{0}+({1})={2}", tuple.Item1,
                                      tuple.Item2,
                                      tuple.Item1 + tuple.Item2);
                }
            });

            broadcastBlock.LinkToWithPropagation(transformPositive);
            broadcastBlock.LinkToWithPropagation(transformNegative);
            transformPositive.LinkToWithPropagation(join.Target1);
            transformNegative.LinkToWithPropagation(join.Target2);

            join.LinkToWithPropagation(sumBlock);

            while (true)
            {
                broadcastBlock.Post(rand.Next(100));
                Thread.Sleep(200);
            }
        }
        public static async Task Run()
        {
            var broadcastBlock = new BroadcastBlock <int>(a => a);

            var a1 = new TransformBlock <int, int>(a =>
            {
                Console.WriteLine($"Mesaj {a} a1 tarafından işlenildi.");
                Task.Delay(300).Wait();
                return(-a);
            });


            var a2 = new TransformBlock <int, int>(a =>
            {
                Console.WriteLine($"Mesaj {a} a2 tarafından işlenildi.");
                Task.Delay(300).Wait();
                return(a);
            });


            var joinBlock = new JoinBlock <int, int>();

            a1.LinkToWithPropagation(joinBlock.Target1);
            a2.LinkToWithPropagation(joinBlock.Target2);

            broadcastBlock.LinkToWithPropagation(a1);
            broadcastBlock.LinkToWithPropagation(a2);

            var finalBlock = new ActionBlock <Tuple <int, int> >(a =>
            {
                Console.WriteLine($"{a.Item1}: tüm consumer'lar tarafından işlenildi");
            });

            joinBlock.LinkToWithPropagation(finalBlock);

            for (int i = 0; i < 10; i++)
            {
                await broadcastBlock.SendAsync(i);
            }

            broadcastBlock.Complete();
            finalBlock.Completion.Wait();
            Console.WriteLine("Tamamlandı");
        }
Beispiel #3
0
        static async Task Main(string[] args)
        {
            var broadcastBlock =
                new BroadcastBlock <int>(a => a,
                                         new DataflowBlockOptions()
            {
                BoundedCapacity = 1
            }
                                         );

            var a1 = new TransformBlock <int, int>(
                a =>
            {
                Console.WriteLine($"Message {a} was processed by consumer 1");
                if (a % 2 == 0)
                {
                    Task.Delay(300).Wait();
                }
                else
                {
                    Task.Delay(50).Wait();
                }
                return(a * -1);
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 3
            });

            var a2 = new TransformBlock <int, int>(
                a =>
            {
                Console.WriteLine($"Message {a} was processed by consumer 2");
                if (a % 2 != 0)
                {
                    Task.Delay(300).Wait();
                }
                else
                {
                    Task.Delay(50).Wait();
                }
                return(a);
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 3
            });

            broadcastBlock.LinkToWithPropagation(a1);
            broadcastBlock.LinkToWithPropagation(a2);

            var joinblock = new JoinBlock <int, int>();

            a1.LinkToWithPropagation(joinblock.Target1);
            a2.LinkToWithPropagation(joinblock.Target2);

            var printBlock = new ActionBlock <Tuple <int, int> >(
                a => Console.WriteLine($"Message {a} was processed. Sum: {a.Item1 + a.Item2}")
                );

            joinblock.LinkToWithPropagation(printBlock);

            for (int i = 0; i < 10; i++)
            {
                await broadcastBlock.SendAsync(i);
            }

            broadcastBlock.Completion.ContinueWith(a => Console.WriteLine("broadcastBlock completed"));
            broadcastBlock.Complete();
            await printBlock.Completion;

            Console.WriteLine("done");
        }