123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System;
- using System.Collections.Concurrent;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Lab19
- {
- class Program
- {
- static BlockingCollection<int> bc;
- static void producer()
- {
- for (int i = 0; i < 100; i++)
- {
- bc.Add(i * i);
- Console.WriteLine($"Producer {i * i}");
- }
- bc.CompleteAdding();
- }
- static void consumer()
- {
- int i;
- while (!bc.IsCompleted)
- {
- if (bc.TryTake(out i))
- {
- Console.WriteLine($"Consumer {i}");
- }
- }
- }
- public static void Main(string[] args)
- {
- bc = new BlockingCollection<int>(4);
- Task ProducerTask = new Task(producer);
- Task ConsumerTask = new Task(consumer);
- ProducerTask.Start();
- ConsumerTask.Start();
- try
- {
- Task.WaitAll(ConsumerTask, ProducerTask);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex);
- }
- finally
- {
- ConsumerTask.Dispose();
- ProducerTask.Dispose();
- bc.Dispose();
- }
- }
- }
- }
|