问题标签 [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# - 在消息循环中使用 Rx 而不是 BlockingCollection
我有一个简单的消息传递框架,它围绕附加到多个“客户端”实例的“主机”的单个实例构建。每个实例通过向其推送消息来与另一个实例通信。然后,实例使用单独的任务按照接收消息的顺序处理它们自己的消息。
这是代码的简化版本:
我的要求是每个处理它们的消息的实例都使用并行执行(如果可能的话),并且每条消息都按照每个班级一次收到一条的顺序进行处理。
生成仅从 GetConsumingEnumerable() 中提取的新任务是不是一个坏主意?
我觉得我可以使用响应式扩展和 IObserveable 来简化这一点,但我对使用 Rx 还是很陌生,并且不确定如何构建它来满足我的并行执行需求。
任何指导将不胜感激!
c# - BlockingCollection 未按预期执行
我有一个调用Func
后台线程传递的方法,称为TaskSpin
. DataGridView
这会根据在(DGV)中单击的站点一次执行一种方法,并且一次只能执行一种方法。所以我点击一个站点(DGV 中的一个纽扣电池),然后它在该站点上运行该方法。现在我有很多站点,不想点击等待数百次,而是想批量处理 DGV 中包含的所有站点。我不能使用直接循环来运行这些,即
因为这几乎会立即返回给调用者,并将开始运行以下站点,这并不好,因为他们使用共享文件。所以我需要一种方法来将站点排队以逐个执行。我决定使用 a ConncurrentCollection - BlockingCollection
,但我被卡住了。在某些按钮单击事件中,我有
其中AsyncMethod
使用 TPL 在后台线程上启动了一个 set 方法。
我的期望是这将一个Action<object[]>
接一个地运行。但这只是冻结了我的申请。我在这里做错了什么?
谢谢你的时间。
*编辑。任务旋转*
c# - 无法创建 BlockingCollection 数组
我有以下代码:
我得到以下错误的底线:
无法使用 [] 将索引应用于“System.Collection.Concurrent.BlockingCollection”类型的表达式
即使我这样做:
最后一个方括号出现错误:
语法错误;期望值
我正在尝试BlockingCollection
使用的集合制作一个数组,ConcurrentQueue
以便我可以做到:
我做错了什么,我能做些什么来解决它?我可以不创建一个数组,BlockingCollection
我必须列出它吗?
c# - 将集合添加到 BlockingCollection
BlockingCollection 仅包含添加单个项目的方法。如果我想添加一个集合怎么办?我应该只使用“foreach”循环吗?
为什么 BlockingCollection 不包含添加集合的方法?我认为这种方法非常有用。
.net-4.0 - foreach 是使用 BlockingCollection 的唯一方法吗在 C# 中?
我现在开始与 TPL 合作。我在这个视频中看到了一个使用 TPL 的简单版本的生产者/消费者模型。
这是问题所在:
以下代码:
返回IEnumerable<Double>
可以使用 foreach 迭代(并自动使用)的:
我的问题是:
- 如果我得到
IEnumerator<Double> dEnum = d.GetEnumerator()
from (例如,用循环d
迭代)也会消耗列表吗?(我的回答:我不这么认为,因为 the 与没有联系,如果你明白我的意思的话。所以它会消耗,但不会,甚至不会)d
while
d.MoveNext()
dEnum
d
dEnum
d
bc
- 我可以以循环以外的方式循环
bc
(或) ,消耗物品吗?(循环比循环快得多,我担心科学计算问题的性能问题)d
foreach
while
foreach
- 在类型中究竟消耗
BlockingCollection<T>
是什么意思?
例如,代码:
谢谢大家!
.net - .Net Concurrent BlockingCollection 有内存泄漏?
我正在使用带有> 的生产者/消费者模式System.Collection.Concurrent.BlockingCollection<DataTable
从数据库(生产者)中检索数据并在数据(消费者)上创建一个 Lucene 索引。
Producer 一次抓取 10000 条记录并将集合添加到BlockingCollection<DataTable>
. 消费者(稍微慢一点)然后抓取这 10000 个并创建一个索引。
阻塞集合限制为<DataTable>
10000 行中的 5 行。
起初,该程序运行良好,但在它获得大约 150000 行后,我注意到我的计算机内存已用完并且速度变慢。
似乎 BlockingCollectionnull
在获取项目后无法将基础数组槽设置为。
代码:
任何人都可以确认拒绝此暂停吗?有什么解决办法吗?
c# - 如何使用 BlockingCollection 数组,一次一个元素,在 C# 中?
我已经看到很多关于如何BlockingCollection<T>
在生产者-消费者场景中使用 a 的示例,甚至是如何在此处一次使用一个元素。我对并行编程很陌生,所以我面临以下问题:
实际上,问题在于如何编写ConsumerProducerExample.ConsumerMethod
下面示例中的方法,以便它为数组中的每个元素消耗前 2double
个BlockingCollection<Double>
,然后为数组中的每个元素消耗下一个 2 double
,依此类推。
我已经在下面的示例中编写了该方法,但这不是我希望它工作的方式。这是我在上面链接的示例中所知道的。恰恰相反:就像这里一样,它会double
在跳转到BlockingCollection<Double>
数组的下一个之前消耗掉每个。而且,我希望它只消耗两个double
,然后跳转到下一个BlockingCollection<Double>
,消耗两个double
,等等。完成数组循环后,它应该再次double
为每个BlockingCollection<Double>
元素消耗下两个,依此类推。
它们应该像这样使用:
有什么建议么?
简而言之,这是一种尝试同时计算nEl
微分方程解中的峰值(sin(x)
在本例中,解由 表示)。
c# - 有界 BlockingCollections 在添加期间会丢失数据吗
我有一个 BlockingCollection(ConcurrentBag, 50000),我试图为生产者线程使用 50,000 的非常小的有界容量,以最大限度地增加我可以在消费者线程的 ConcurrentDictionary 中处理的记录数。生产者比消费者快得多,否则会消耗大部分内存。
不幸的是,我立即注意到我的 ConcurrentDictionary 中的记录总数现在大大低于在我的测试数据执行时添加 50,000 的有界容量后应有的记录数。我读到 BlockingCollection 的 .add 方法应该无限期地阻塞,直到集合中有空间可以执行添加。然而,情况似乎并非如此。
问题:
如果在 BlockingCollection 中的容量释放之前调用了太多 add 方法,BlockingCollection 的 .add 方法最终会超时还是静默失败?
如果 #1 的答案是肯定的,那么在超出 Bounding Capacity 后我可以尝试多少次添加而不丢失数据?
如果调用了许多 BlockingCollection .add() 方法,这些方法正在等待/阻塞容量并调用 CompleteAdding() 方法,那么那些等待/阻塞的添加会继续等待然后最终添加还是静默失败?
c# - BlockingCollection 多个消费者
我有以下代码,其中包含一个生产者线程和多个消费者线程。你知道多个消费者是否是线程安全的。例如,线程 1 是否有可能正在消耗,而线程 2 是否并行消耗并更改线程 1 中使用的项目的值?
提前致谢
c# - 使用 BlockingCollection 更新 ObservableCollection
我订阅了一项服务,该服务将在收到新元素时引发事件,我将此元素添加到BlockingCollection
.
我有第二个线程正在运行,它将循环BlockingCollection
添加/更新可观察集合中的元素。
问题是如何添加ObservableCollection
?我知道我不能只.add
对这种类型的集合做一个,因为它需要在 UI 线程上完成。所以我尝试使用不同ObservableCollection
的子类,这些子类使用调度程序来编组元素的添加,但每一次,我都会遇到同样的错误
“未知模块中发生了‘System.StackOverflowException’类型的未处理异常。”
故障排除提示如下:
确保您没有无限循环或无限递归。
好吧,实际上我确实有某种无限循环,因为它一直在BlockingQueue
接收新元素,比如每秒 5 到 10 个。
如果我不将控件绑定到observablecollection
,或者如果我使用 List 代替,我不会得到异常。
编辑当我追踪它时,该错误自行消失了。我试图让事情变得更简单,以便真正了解问题所在,然后它开始起作用。当把东西重新组合在一起时,它仍然可以工作......但它会不时地回来,因为似乎不相关的原因,比如在我的列表视图中添加样式。我开始认为第三方 dll 存在问题。