using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks; namespace Lab19 { class Program { static BlockingCollection 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(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(); } } } }