BlockingCollection
是 .NET 集合框架中提供的一個線程安全的集合,它可以很好地處理并發操作。BlockingCollection
提供了 Add
、TryAdd
、Take
和 TryTake
等方法,這些方法在內部使用了鎖和信號量來確保線程安全。
以下是一個簡單的示例,展示了如何使用 BlockingCollection
來處理并發操作:
using System;
using System.Collections.Concurrent;
using System.Threading;
class Program
{
static BlockingCollection<int> _blockingCollection = new BlockingCollection<int>();
static void Main(string[] args)
{
// 創建兩個生產者線程和一個消費者線程
Thread producer1 = new Thread(Produce);
Thread producer2 = new Thread(Produce);
Thread consumer = new Thread(Consume);
producer1.Start();
producer2.Start();
consumer.Start();
// 等待所有線程完成
producer1.Join();
producer2.Join();
consumer.Join();
}
static void Produce()
{
for (int i = 0; i < 10; i++)
{
// 嘗試向集合中添加元素,如果集合已滿,則等待
_blockingCollection.TryAdd(i);
Console.WriteLine($"Produced: {i}");
Thread.Sleep(100); // 模擬生產過程耗時
}
}
static void Consume()
{
while (true)
{
// 嘗試從集合中獲取元素,如果集合為空,則等待
int item = _blockingCollection.Take();
Console.WriteLine($"Consumed: {item}");
Thread.Sleep(200); // 模擬消費過程耗時
}
}
}
在這個示例中,我們創建了一個 BlockingCollection<int>
實例,并啟動了兩個生產者線程和一個消費者線程。生產者線程嘗試向集合中添加元素,如果集合已滿,則等待。消費者線程嘗試從集合中獲取元素,如果集合為空,則等待。這樣,我們就實現了一個簡單的并發操作處理。