Synchronous ProducerConsumer with BufferBlockT
suggest changepublic class Producer { private static Random random = new Random((int)DateTime.UtcNow.Ticks); //produce the value that will be posted to buffer block public double Produce ( ) { var value = random.NextDouble(); Console.WriteLine($"Producing value: {value}"); return value; } } public class Consumer { //consume the value that will be received from buffer block public void Consume (double value) => Console.WriteLine($"Consuming value: {value}"); } class Program { private static BufferBlock<double> buffer = new BufferBlock<double>(); static void Main (string[] args) { //start a task that will every 1 second post a value from the producer to buffer block var producerTask = Task.Run(async () => { var producer = new Producer(); while(true) { buffer.Post(producer.Produce()); await Task.Delay(1000); } }); //start a task that will recieve values from bufferblock and consume it var consumerTask = Task.Run(() => { var consumer = new Consumer(); while(true) { consumer.Consume(buffer.Receive()); } }); Task.WaitAll(new[] { producerTask, consumerTask }); } }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents