首页 > 解决方案 > 在c#中的单独线程中处理队列

问题描述

我有一个具有缓冲区大小的队列列表的类。我想在单独的线程中按顺序处理这些队列。最好的方法是什么?

每个队列都有一个单独的缓冲区大小。

Class QueueCollection
{
    List<Queue> valuecollection = new List<Queue>();

    // logic to add queue

}

标签: c#multithreading

解决方案


这是一个非常笼统的问题,所以我们最多只能给出非常笼统的答案。

您使用了两端没有可见锁定的基本队列。这是不行的。基本集合适合多线程。它们会抛出完全意想不到的异常,例如由于 Add 和 Growing 之间的竞争条件,列表会抛出“太小”。

你需要类似的东西ConcurrentQueue<T>

https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentqueue-1

然而,这Channel<T>也是一种选择。这是针对此类场景的目的构建队列:

https://docs.microsoft.com/en-us/dotnet/api/system.threading.channels.channel-1

请注意,这些集合只能处理与添加检索项目相关的竞争条件。您可能还需要处理更多的比赛条件。


推荐阅读