Producer–Consumer using BlockingCollection?
BlockingCollection<int> queue = new BlockingCollection<int>();
Task.Run(() =>
{
for(int i = 1; i <= 5; i++)
{
queue.Add(i);
}
queue.CompleteAdding();
});
Task.Run(() =>
{
foreach(var item in queue.GetConsumingEnumerable())
{
Console.WriteLine("Consumed " + item);
}
});
Provides automatic thread synchronization and prevents race conditions.