11得票3回答
等待一个BlockingCollection队列被后台线程清空,如果等待时间过长,则设置超时时间?

在C#中,我想知道是否有可能等待直到一个BlockingCollection被后台线程清除,如果等待时间过长则设置超时。目前我所使用的临时代码让我感觉有些不够优雅(因为使用Thread.Sleep好像并不是一个好习惯):while (_blockingCollection.Count >...

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

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

9得票1回答
当生产者也是消费者时,如何在生产者/消费者模式中使用BlockingCollection?如何结束?

我有一个递归问题,消费者需要在树的每个级别上执行一些工作,然后需要递归下降到树的下一个级别执行相同的工作。 我想使用 ConcurrentBag/BlockingCollection 等工具并行运行。在这种情况下,队列的消费者也是队列的生产者! 我的问题是:使用 BlockingColle...

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

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

8得票2回答
如何在 BlockingCollection 上取消 GetConsumingEnumerable()?

在以下代码中,我使用CancellationToken来在生产者不生产时唤醒GetConsumingEnumerable(),并且希望退出foreach并退出任务。但是我没有看到IsCancellationRequested被记录,而我的Task.Wait(timeOut)等待了整个timeO...

8得票3回答
如何在BlockingCollection中包装ConcurrentDictionary?

我尝试通过将ConcurrentDictionary包装在BlockingCollection中来实现,但似乎并没有成功。 我知道一些变量声明可以与BlockingCollection一起使用,例如ConcurrentBag<T>,ConcurrentQueue<T>...

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

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

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

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

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

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

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

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