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

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

30得票5回答
使用BlockingCollection<T>: OperationCanceledException,有更好的方法吗?

我正在使用(非常优秀的)BlockingCollection&lt;T&gt; 类型来开发一个高度多线程、高性能的应用程序。每个“批次”都将通过标记取消令牌来结束,这会导致任何等待的 Take 调用都会抛出异常。虽然这很好,但我更希望返回值或输出参数来表示它,因为a) 异常有明显的开销,b) ...

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

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

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

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

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

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

7得票1回答
有界阻塞集合在添加元素时是否可能丢失数据?

我有一个BlockingCollection(ConcurrentBag, 50000),我试图使用非常小的有界容量50,000来最大化消费者线程中可以处理的记录数量。生产者比消费者快得多,否则会消耗大部分内存。 不幸的是,在我的测试数据执行后,我立即注意到我的ConcurrentDicti...

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

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

14得票4回答
BlockingCollection<>中的元素顺序

我有一个使用BlockingCollection&lt;&gt;实现的下载队列。现在我想偶尔优先处理一些下载。我考虑过可能会像列表中一样将某些元素“上移”,但是没有像Remove() / AddFirst()或Move()这样的方法。 在BlockingCollection&lt;&gt;中排...

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

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

19得票4回答
为什么在迭代GetConsumingEnumerable()时,不能完全清空底层的阻塞集合?

我在使用任务并行库、BlockingCollection、ConcurrentQueue和GetConsumingEnumerable时遇到了一个可量化且可重复的问题,尝试创建一个简单的流水线。 简而言之,从一个线程向默认的BlockingCollection(在底层依赖于Concurren...