相关疑难解决方法(0)

如何批量使用BlockingCollection <T>

我想出了一些代码来消耗队列中所有的wating项目.而不是逐项处理项目,将所有等待项目作为一组处理是有意义的.

我已经宣布我的队列是这样的.

private BlockingCollection<Item> items = 
    new BlockingCollection<Item>(new ConcurrentQueue<Item>);
Run Code Online (Sandbox Code Playgroud)

然后,在消费者线程上,我打算像这样批量阅读这些项目,

Item nextItem;
while (this.items.TryTake(out nextItem, -1))
{
    var workToDo = new List<Item>();
    workToDo.Add(nextItem);

    while(this.items.TryTake(out nextItem))
    {
        workToDo.Add(nextItem);
    }

    // process workToDo, then go back to the queue.
}
Run Code Online (Sandbox Code Playgroud)

这种方法缺乏实用性,GetConsumingEnumerable我不禁想知道我是否错过了更好的方法,或者我的方法是否存在缺陷.

有没有更好的方法来BlockingCollection<T>批量消费?

.net c# concurrency

12
推荐指数
2
解决办法
2249
查看次数

标签 统计

.net ×1

c# ×1

concurrency ×1