Program.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace Lab19
  6. {
  7. class Program
  8. {
  9. static BlockingCollection<int> bc;
  10. static void producer()
  11. {
  12. for (int i = 0; i < 100; i++)
  13. {
  14. bc.Add(i * i);
  15. Console.WriteLine($"Producer {i * i}");
  16. }
  17. bc.CompleteAdding();
  18. }
  19. static void consumer()
  20. {
  21. int i;
  22. while (!bc.IsCompleted)
  23. {
  24. if (bc.TryTake(out i))
  25. {
  26. Console.WriteLine($"Consumer {i}");
  27. }
  28. }
  29. }
  30. public static void Main(string[] args)
  31. {
  32. bc = new BlockingCollection<int>(4);
  33. Task ProducerTask = new Task(producer);
  34. Task ConsumerTask = new Task(consumer);
  35. ProducerTask.Start();
  36. ConsumerTask.Start();
  37. try
  38. {
  39. Task.WaitAll(ConsumerTask, ProducerTask);
  40. }
  41. catch (Exception ex)
  42. {
  43. Console.WriteLine(ex);
  44. }
  45. finally
  46. {
  47. ConsumerTask.Dispose();
  48. ProducerTask.Dispose();
  49. bc.Dispose();
  50. }
  51. }
  52. }
  53. }