问题标签 [blockingcollection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2883 浏览

c# - GetConsumingEnumerable 是否真的从 BlockingCollection 中删除了一个项目?

http://msdn.microsoft.com/en-us/library/dd267312.aspx上的 MSDN 评论指出......

“BlockingCollection 的默认集合类型是 ConcurrentQueue”

这是否意味着当我在集合上运行“GetConsumingEnumerable()”时,拉出的项目正在从队列中出列,使用后将被标记为 GC?

换句话说......在下面的片段中,

循环迭代后项目会发生什么?

0 投票
0 回答
582 浏览

c# - BlockingCollection 能够在运行时重新设置最大项目数

BlockingCollection在一个经典的发布-订阅类型示例中使用了一个,其中集合用作缓冲区。当它达到 N 时,它必须等待读者消费至少一项。这工作正常。

现在我希望能够在运行时重置集合可以容纳的最大项目数。我知道如何使用锁和监视器来实现这一点并一起废弃blockingcollection,但我不想重新实现核心框架中已经存在的东西。

有没有办法做到这一点?

0 投票
1 回答
1393 浏览

c# - 使 Blockingcollection 可观察

我的视图模型中有一个绑定到阻塞集合的列表

和财产

使blockingcollection可观察的最简单方法是什么,似乎找不到任何好的例子

0 投票
1 回答
1397 浏览

c# - 从 BlockingCollection 中移除元素并填充 Observable 集合

我有一个用例,其中我想从阻塞集合中插入和删除自定义对象(股票)(大图是生产者消费者队列)。

问题陈述与此线程完全相同 -使用 BlockingCollection 更新 ObservableCollection

我不想使用响应式扩展,但想要传统的 C# 方式来执行此逻辑(不幸的是,这是一个硬性要求,并且完全理解其含义)。我的代码片段在这里

MainWindowViewModel.cs

0 投票
2 回答
105 浏览

.net - 阻塞集合操作和结构

我正在使用具有 T 类型的类的 BlockingCollection,我想知道是否应该将 T 转换为结构。

从 BlockingCollection 签名原则上我看不出有什么问题:

但是,支持取消的阻塞操作的语义是,如果在元素可用之前取消操作,则返回 null。这里的问题是一个结构不能为null,所以下面的代码是无效的

因此,阻塞集合是否仅限于类,或者语义更改是否返回未初始化的结构?

0 投票
4 回答
38596 浏览

java - ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别

  1. 什么情况下使用 ArrayBlockingQueue 更好,什么时候使用 LinkedBlockingQueue 更好?
  2. 如果 LinkedBlockingQueue 默认容量等于 MAX Integer,那么将其用作具有默认容量的 BlockingQueue 真的有帮助吗?
0 投票
1 回答
620 浏览

c# - Parallel.Foreach/For 如何调用 BlockingCollection.Take?有或没有 CancellationToken

Parallel.Foreach/For 是否调用 BlockingCollection1.Take 函数有或没有我放入 ParallelOptions 的 CancellationToken?

有机会知道吗?

0 投票
2 回答
1034 浏览

c# - 阻塞集合.GetConsumingEnumerable() 在附加条件下阻塞

是否可以在流和其他一些标准上都有一个BlockingCollection<T>JobQueue在我的例子中)块执行?GetConsumingEnumerable()

我的条件availableSlots > 0是只允许在有可用插槽时消耗物品。问题是当集合中有项目但条件为假时,foreach 无限循环。

我不能让收藏也被阻止availableSlots > 0吗?

也许我错误地使用了这个集合。任何帮助表示赞赏!

0 投票
2 回答
4986 浏览

c# - 取消 BlockingCollection.GetConsumingEnumerable() 并处理剩下的

我有一个生成工作的进程和一个BlockingCollection<>消耗该工作的第二个进程。当我关闭我的程序时,我需要我的消费者停止消费工作,但我仍然需要快速记录正在等待但尚未消费的工作。

现在,我的消费者产生了一个有foreach (<object> in BlockingCollection.GetConsumingEnumerable())循环的线程。当我停止我的程序时,我的制作人会调用Consumer.BlockingCollection.CompleteAdding(). 我发现我的消费者继续处理队列中的所有内容。

谷歌搜索的问题告诉我,我需要使用CancellationToken. 所以我试了一下:

我的制片人有:

当我尝试这个时,没有任何迹象表明 OperationCancelledException 曾经发生过。

这个问题试图解释取消令牌的使用,但似乎没有正确使用它。(争论:如果它有效,那么它“足够正确”。)这个问题似乎与我的问题完全相同,但没有例子。(这里也一样。)

所以重申一下:如何正确使用CancellationTokenonBlockingCollection.GetConsumingEnumerable()并注意在使用其他方法取消队列后需要处理队列中的剩余项目?

(我认为我的问题集中在正确使用 CancellationToken 上。我的测试都没有表明该过程实际上被取消了。(StopFlag.IsCancellationRequested总是等于false。))

0 投票
2 回答
3409 浏览

.net - ConcurrentDictionary 的列表顺序是否得到保证?

我正在使用 ConcurrentDictionary 来存储日志行,当我需要向用户显示它们时,我调用ToList()它来生成一个列表。但奇怪的是,一些用户在列表中最先收到最近的行,而从逻辑上讲,他们应该排在最后。

这是因为 ConcurrentDictionary 不保证 IEnumerate 接口上的持久顺序,还是可能是什么原因?