10得票4回答
如何访问阻塞集合的底层默认并发队列?

我有多个生产者和一个消费者。但是,如果队列中还有未被消费的内容,生产者就不应该将其重新排队。(使用默认并发队列的唯一、无重复项的阻塞集合)if (!myBlockingColl.Contains(item)) myBlockingColl.Add(item) 然而,阻塞集合没有 con...

9得票1回答
如何在TPL Dataflow中进行异步操作以获得最佳性能?

我编写了下面的方法来批量处理一个巨大的CSV文件。思路是将文件中的一块行读入内存,然后将这些行分成固定大小的批次。一旦我们得到分区,就将这些分区发送到服务器(同步或异步),这可能需要一段时间。 private static void BatchProcess(string filePath,...

7得票3回答
取消 BlockingCollection.GetConsumingEnumerable() 并处理剩余内容

我有一个进程生成工作,第二个进程使用 BlockingCollection<> 消费这些工作。当我关闭程序时,我需要让消费者停止消费工作,但我仍然需要快速记录尚未被消费的挂起工作。 目前,我的消费者生成一个线程,该线程具有一个 foreach (<object> in...

16得票3回答
如何创建无重复项的ConcurrentQueue?

我需要一个并发集合,不允许有重复的元素(用于在 BlockingCollection 中作为 Producer/Consumer)。 我不需要元素的严格顺序。 另一方面,我希望最大程度地减少元素在集合中的“存活”时间。也就是说,集合不应该是 LIFO,理想情况下应该是 FIFO。 我觉得我需要...

7得票3回答
使用 Task.WhenAll 和由 BlockingCollection 产生的无限 Tasks

我正在将后台任务添加到阻塞集合中(在后台中添加)。 我使用由GetConsumingEnumerable返回的可枚举对象上的Task.WhenAll进行等待。 我的问题是:接收IEnumerable的Task.WhenAll重载是否“准备好”可能接收无限数量的任务? 我不确定是否可以这样...

7得票1回答
.Net并发BlockingCollection存在内存泄漏问题?

我正在使用生产者/消费者模式和System.Collection.Concurrent.BlockingCollection<DataTable>从数据库中检索数据(生产者),并在数据上创建Lucene索引(消费者)。 生产者一次获取10000条记录,并将集合添加到Blockin...

13得票1回答
BlockingCollection.TakeFromAny方法适合构建阻塞优先级队列吗?

我需要建立一个阻塞式优先队列,我的直觉是TakeFromAny可能是关键因素,但是该方法的文档很少。它的目的/适当使用方式是什么? 我的要求是多个线程将添加到高优先级或低优先级队列中。一个线程将始终从高优先级队列中获取,然后是低优先级队列。 很可能BlockingCollection或Ta...

7得票2回答
BlockingCollection多个消费者

我有以下代码,其中包括一个生产者线程和多个消费者线程。您是否知道多个消费者是否是线程安全的?例如,线程1正在使用某个项目时,是否有可能并行运行线程2并更改该项目的值? namespace BlockingColl { public partial class Form1 : Form { ...

23得票2回答
使用BlockingCollection.GetConsumableEnumerable的Parallel.ForEach循环

为什么使用 GetConsumableEnumerable 时,Parallel.ForEach 循环会退出并出现 OperationCancelledException 异常? //outside the function static BlockingCollection<doub...

46得票4回答
ArrayBlockingQueue和LinkedBlockingQueue有什么区别?

在哪些场景中最好使用ArrayBlockingQueue?什么时候使用LinkedBlockingQueue更好? 如果LinkedBlockingQueue的默认容量等于MAX Integer,那么将其用作具有默认容量的BlockingQueue是否真的有所帮助?