问题标签 [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.
c# - GetConsumingEnumerable 是否真的从 BlockingCollection 中删除了一个项目?
http://msdn.microsoft.com/en-us/library/dd267312.aspx上的 MSDN 评论指出......
“BlockingCollection 的默认集合类型是 ConcurrentQueue”
这是否意味着当我在集合上运行“GetConsumingEnumerable()”时,拉出的项目正在从队列中出列,使用后将被标记为 GC?
换句话说......在下面的片段中,
循环迭代后项目会发生什么?
c# - BlockingCollection 能够在运行时重新设置最大项目数
我BlockingCollection
在一个经典的发布-订阅类型示例中使用了一个,其中集合用作缓冲区。当它达到 N 时,它必须等待读者消费至少一项。这工作正常。
现在我希望能够在运行时重置集合可以容纳的最大项目数。我知道如何使用锁和监视器来实现这一点并一起废弃blockingcollection,但我不想重新实现核心框架中已经存在的东西。
有没有办法做到这一点?
c# - 使 Blockingcollection 可观察
我的视图模型中有一个绑定到阻塞集合的列表
和财产
使blockingcollection可观察的最简单方法是什么,似乎找不到任何好的例子
c# - 从 BlockingCollection 中移除元素并填充 Observable 集合
我有一个用例,其中我想从阻塞集合中插入和删除自定义对象(股票)(大图是生产者消费者队列)。
问题陈述与此线程完全相同 -使用 BlockingCollection 更新 ObservableCollection
我不想使用响应式扩展,但想要传统的 C# 方式来执行此逻辑(不幸的是,这是一个硬性要求,并且完全理解其含义)。我的代码片段在这里
MainWindowViewModel.cs
.net - 阻塞集合操作和结构
我正在使用具有 T 类型的类的 BlockingCollection,我想知道是否应该将 T 转换为结构。
从 BlockingCollection 签名原则上我看不出有什么问题:
但是,支持取消的阻塞操作的语义是,如果在元素可用之前取消操作,则返回 null。这里的问题是一个结构不能为null,所以下面的代码是无效的
因此,阻塞集合是否仅限于类,或者语义更改是否返回未初始化的结构?
java - ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别
- 什么情况下使用 ArrayBlockingQueue 更好,什么时候使用 LinkedBlockingQueue 更好?
- 如果 LinkedBlockingQueue 默认容量等于 MAX Integer,那么将其用作具有默认容量的 BlockingQueue 真的有帮助吗?
c# - Parallel.Foreach/For 如何调用 BlockingCollection.Take?有或没有 CancellationToken
Parallel.Foreach/For 是否调用 BlockingCollection1.Take 函数有或没有我放入 ParallelOptions 的 CancellationToken?
有机会知道吗?
c# - 阻塞集合.GetConsumingEnumerable() 在附加条件下阻塞
是否可以在流和其他一些标准上都有一个BlockingCollection<T>
(JobQueue
在我的例子中)块执行?GetConsumingEnumerable()
我的条件availableSlots > 0
是只允许在有可用插槽时消耗物品。问题是当集合中有项目但条件为假时,foreach 无限循环。
我不能让收藏也被阻止availableSlots > 0
吗?
也许我错误地使用了这个集合。任何帮助表示赞赏!
c# - 取消 BlockingCollection.GetConsumingEnumerable() 并处理剩下的
我有一个生成工作的进程和一个BlockingCollection<>
消耗该工作的第二个进程。当我关闭我的程序时,我需要我的消费者停止消费工作,但我仍然需要快速记录正在等待但尚未消费的工作。
现在,我的消费者产生了一个有foreach (<object> in BlockingCollection.GetConsumingEnumerable())
循环的线程。当我停止我的程序时,我的制作人会调用Consumer.BlockingCollection.CompleteAdding()
. 我发现我的消费者继续处理队列中的所有内容。
谷歌搜索的问题告诉我,我需要使用CancellationToken
. 所以我试了一下:
我的制片人有:
当我尝试这个时,没有任何迹象表明 OperationCancelledException 曾经发生过。
这个问题试图解释取消令牌的使用,但似乎没有正确使用它。(争论:如果它有效,那么它“足够正确”。)这个问题似乎与我的问题完全相同,但没有例子。(这里也一样。)
所以重申一下:如何正确使用CancellationToken
onBlockingCollection.GetConsumingEnumerable()
并注意在使用其他方法取消队列后需要处理队列中的剩余项目?
(我认为我的问题集中在正确使用 CancellationToken 上。我的测试都没有表明该过程实际上被取消了。(StopFlag.IsCancellationRequested
总是等于false
。))
.net - ConcurrentDictionary 的列表顺序是否得到保证?
我正在使用 ConcurrentDictionary 来存储日志行,当我需要向用户显示它们时,我调用ToList()
它来生成一个列表。但奇怪的是,一些用户在列表中最先收到最近的行,而从逻辑上讲,他们应该排在最后。
这是因为 ConcurrentDictionary 不保证 IEnumerate 接口上的持久顺序,还是可能是什么原因?