https://docs.microsoft.com/zh-cn/dotnet/standard/collections/thread-safe/blockingcollection-overview
BlockingCollection 概述
BlockingCollection<T> 是一个线程安全集合类,可提供以下功能:
-
实现制造者-使用者模式。
-
通过多线程并发添加和获取项。
-
可选最大容量。
-
集合为空或已满时通过插入和移除操作进行阻塞。
-
插入和移除“尝试”操作不发生阻塞,或在指定时间段内发生阻塞。
-
封装实现 IProducerConsumerCollection<T> 的任何集合类型
-
使用取消标记执行取消操作。
-
支持使用
foreach(在 Visual Basic 中,使用For Each)的两种枚举:-
只读枚举。
-
在枚举项时将项移除的枚举。
-
public class BlockingTest
{
BlockingCollection<int> bc = new BlockingCollection<int>();
public BlockingTest()
{
Task.Factory.StartNew(ProduceTask);
// Task.Factory.StartNew(ConsumeTask);
}
private void ProduceTask()
{
foreach (var item in Enumerable.Range(1, 100))
{
bc.Add(item);
Console.WriteLine(string.Format("+++++++++++++: {0}", item) + " total:" + bc.Count);
Thread.Sleep(100);
}
bc.CompleteAdding();
}
private void ConsumeTask()
{
foreach (var item in bc.GetConsumingEnumerable())
{
Console.WriteLine(string.Format("---------------: {0}", item)+" total:"+ bc.Count);
}
}
}