using System;
using System.Collections.Concurrent;
using System.Threading;
class Program
{
static void Main()
{
// 创建一个容量为5的BlockingCollection
BlockingCollection<int> collection = new BlockingCollection<int>(5);
// 启动一个生产者线程
Thread producerThread = new Thread(() =>
{
for (int i = 0; i < 10; i++)
{
// 尝试添加元素到集合中,如果集合已满则阻塞
collection.Add(i);
Console.WriteLine($"Produced: {i}");
Thread.Sleep(100); // 模拟生产时间
}
// 完成添加操作
collection.CompleteAdding();
});
// 启动一个消费者线程
Thread consumerThread = new Thread(() =>
{
while (!collection.IsCompleted)
{
try
{
// 尝试从集合中取出元素,如果集合为空则阻塞
int item = collection.Take();
Console.WriteLine($"Consumed: {item}");
Thread.Sleep(150); // 模拟消费时间
}
catch (InvalidOperationException)
{
// 当集合已完成并且为空时退出循环
break;
}
}
});
// 启动线程
producerThread.Start();
consumerThread.Start();
// 等待线程结束
producerThread.Join();
consumerThread.Join();
}
}
BlockingCollection<int> collection = new BlockingCollection<int>(5); 创建了一个容量为5的集合。Add 方法向集合中添加元素,当集合已满时,Add 方法会阻塞直到有空间可用。Take 方法从集合中取出元素,当集合为空时,Take 方法会阻塞直到有元素可用。CompleteAdding 方法通知消费者不再会有新的元素加入。IsCompleted 属性判断是否所有元素都已被消费完毕。下一篇:c# 字符串包含
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站