Advertisement
ivandrofly

Parallel Programming in .NET and C# 4 [ADVANCE]

Mar 23rd, 2014
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.40 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5.  
  6. namespace Parallel_Programming
  7. {
  8.     internal class Program
  9.     {
  10.         private static void Main(string[] args)
  11.         {
  12.             Action<Action> measure = (body) =>
  13.             {
  14.                 var startTime = DateTime.Now;
  15.                 body();
  16.                 Console.WriteLine("{0} {1}", DateTime.Now - startTime, Thread.CurrentThread.ManagedThreadId);
  17.             };
  18.  
  19.             Action calcJob = () => { for (int i = 0; i < 350000000; i++);};
  20.             Action ioJob = () => { Thread.Sleep(1000); };
  21.  
  22.             //measure(() =>
  23.             //{
  24.             //    var tasks = Enumerable.Range(1, 10)
  25.             //        .Select(_ => Task.Factory.StartNew(() => measure(ioJob))).ToArray();
  26.             //    Task.WaitAll(tasks);
  27.             //});
  28.             // CTRL+F5
  29.  
  30.             //ThreadPool.SetMinThreads(5, 5);
  31.             //Parallel.For(0, 10, _ => { measure(ioJob); });
  32.  
  33.             //ParallelEnumerable.Range(10, 10)
  34.             //    .WithDegreeOfParallelism(5)
  35.             //    .ForAll(_ => measure(ioJob));
  36.  
  37.             //Enumerable.Range(1, 10).ToList()
  38.             //    .AsParallel()
  39.             //    .WithDegreeOfParallelism(10)
  40.             //    .ForAll(_ => measure(ioJob));
  41.  
  42.             //var queue = new Queue<int>();
  43.             var queue = new System.Collections.Concurrent.BlockingCollection<int>(100);
  44.             var producers = Enumerable.Range(1, 3)
  45.                 .Select(_ => Task.Factory.StartNew(() =>
  46.                     {
  47.                         Enumerable.Range(1, 100)
  48.                             .ToList()
  49.                             .ForEach(i =>
  50.                             {
  51.                                 queue.Add(i);
  52.                                 Thread.Sleep(100);
  53.                             });
  54.                     })).ToArray();
  55.  
  56.             var consumers = Enumerable.Range(1, 2)
  57.                 .Select(_ => Task.Factory.StartNew(() =>
  58.                 {
  59.                     foreach (var item in queue.GetConsumingEnumerable())
  60.                     {
  61.                         Console.WriteLine(item);
  62.                     }
  63.                 })).ToArray();
  64.  
  65.             Task.WaitAll(producers);
  66.             queue.CompleteAdding();
  67.             Task.WaitAll(consumers);
  68.         }
  69.     }
  70. }
  71. // Watch: https://www.youtube.com/watch?v=r1FbKiHYHcw
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement