gpt4 book ai didi

c# - 允许我等待一个生产者的 ConcurrentQueue

转载 作者:太空狗 更新时间:2023-10-29 21:57:01 25 4
gpt4 key购买 nike

我有生产者/消费者的问题。目前我有一个简单的 Queuelock 包围。

我正在尝试用更高效的东西替换它。

我的第一选择是使用 ConcurrentQueue,但我不知道如何让我的消费者等待下一条生成的消息(不执行 Thread.Sleep)。

此外,如果队列的大小达到特定数量,我希望能够清除整个队列。

你能推荐一些符合我要求的现有类或实现吗?

最佳答案

这是一个关于如何使用 BlockingCollection 的示例类做你想做的事:

BlockingCollection<int> blocking_collection = new BlockingCollection<int>();

//Create producer on a thread-pool thread
Task.Run(() =>
{
int number = 0;

while (true)
{
blocking_collection.Add(number++);

Thread.Sleep(100); //simulating that the producer produces ~10 items every second
}
});

int max_size = 10; //Maximum items to have

int items_to_skip = 0;

//Consumer
foreach (var item in blocking_collection.GetConsumingEnumerable())
{
if (items_to_skip > 0)
{
items_to_skip--; //quickly skip items (to meet the clearing requirement)
continue;
}

//process item
Console.WriteLine(item);

Thread.Sleep(200); //simulating that the consumer can only process ~5 items per second

var collection_size = blocking_collection.Count;

if (collection_size > max_size) //If we reach maximum size, we flag that we want to skip items
{
items_to_skip = collection_size;
}
}

关于c# - 允许我等待一个生产者的 ConcurrentQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com