BlockingCollection - Improves Multithreaded Performance
BlockingCollection<T> helps in producer-consumer scenarios for thread-safe data sharing.
Before (Manual Locking with Poor Performance)
Manually managing thread synchronization with locks leads to complex and inefficient code.
List<int> data = new List<int>(); object lockObj = new object(); void Producer() { for (int i = 0; i < 5; i++) { lock (lockObj) { data.Add(i); } } } void Consumer() { while (true) { int item; lock (lockObj) { if (data.Count == 0) continue; item = data[0]; data.RemoveAt(0); } Console.WriteLine($"Consumed {item}"); } }
After (Efficient Producer-Consumer with BlockingCollection)
Using BlockingCollection<T>, thread synchronization is simpler and more efficient.
using System.Collections.Concurrent; BlockingCollection<int> queue = new BlockingCollection<int>(); void Producer() { for (int i = 0; i < 5; i++) { queue.Add(i); } queue.CompleteAdding(); } void Consumer() { foreach (var item in queue.GetConsumingEnumerable()) { Console.WriteLine($"Consumed {item}"); } }