问题标签 [concurrent-queue]

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 投票
0 回答
85 浏览

c# - 实现并发队列的多个实例

我正在尝试使用 .NET ConcurrentQueue,但遇到了一些麻烦。这就是我想要完成的情况。

当我的应用程序加载时,我将加载一个包含 1000 个对象的队列。当用户单击一个按钮时,它将获取队列中的第一个对象......做一些工作......然后将项目传递给下一个队列。队列按顺序排列,因此当 queue1 完成后,它会将其传递给 queue2,然后将 queue2 传递给 queue3 等。

我最多可以有 100 个队列。

我认为 ConcurrentQueue 将是做到这一点的最佳方式,但是,我不太确定如何去做。

0 投票
1 回答
102 浏览

c# - System.Threading.dll 使 WPF 应用程序在 30 多秒内启动

针对框架 3.5 的“完全空”的 WPF 应用程序项目需要 30 多秒才能在 Windows 7 嵌入式 SP1 上启动。

该问题在 Windows 7 Enterprise SP1 和 Windows XP 上均未出现。

WPF 项目中唯一的事情是来自 System.Threading.dll 的 ConcurrentQueue 的声明/初始化:

我不得不使用这个 dll,因为 ConcurrentQueue 在 3.5 框架中不存在。

这似乎是一个系统问题,这可能是两个 ConcurrentQueue 之间的问题吗?我的dll中的一个和Windows 7嵌入式计算机上安装的framework 4.0中的一个?

一些相关资料

System.Threading dll 的版本是 1.0.2856.102

编辑

正如@Sinatr 所建议的,我创建了另一个 ConcurrentQueue(使用 ILSpy 复制粘贴 ConcurrentQueue、SystemCollectionsConcurrent_ProducerConsumerCollectionDebugView 和 IProducerConsumerCollection)。

这解决了问题,但我想知道为什么。

0 投票
1 回答
672 浏览

c# - 对 concurrentQueue 的误解,一个消费者在自己的线程上从队列中工作

我在创建一个功能正常的 SystemFileWatcher 时遇到了麻烦,它接收创建的事件并将其存储在队列中以供单独的线程工作。我在这里阅读了无数关于这个问题的帖子,但我无法理解这个特定的问题。

}

这是我想测试的。我知道这不起作用。当文件放入队列中时,我只是简单地写入控制台,我已经验证了 FSW 的工作原理。当我尝试在它自己的线程中启动移动器功能时,我的问题就开始了。一旦我开始在队列外工作,移动函数和 onCreated 似乎就没有通信了。

我对这段代码的期望是在它自己的线程中启动移动器函数并与 SFW 一起运行它。我的期望是附加到blockingcollection自动更新的并发队列(我通过onCreated将一个项目排入队列,移动器看到它现在对该队列有+1。移动器从队列中取出一个,onCreated看到这个。)我是可能错误地使用了 Thread.Sleep。我不再有使用blockingcollection的支持理由(我最初选择它来处理等待队列填满,并且基本上,不断检查队列以查找要处理的项目)并且愿意将其更改为任何可能的工作。我已经看到了锁的使用,但据我了解,由于 concurrentQueue 是如何同步的,这并不是真正必要的。

最终目标是处理大量随机进入的小文件,在任何给定时间范围从 1 到数百不等。这些文件是 .EML。

如果可能的话,我将非常感谢您解释正在发生的事情以及解决此问题的建议。我谦虚地来,希望被告知我所理解的一切都是不正确的!

编辑:我将其作为控制台应用程序进行测试,但之后将用作服务。我添加了 while (true) ;在 onCreated() 之前保持 FSW 运行。

0 投票
1 回答
83 浏览

windows - concurrent_queue 在每个线程上为 try_pop() 提供相同的值

我想知道当我尝试使用 concurrent_queue 时是否完全搞错了。我正在尝试使用线程处理文件。线程从 concurrent_queue 中提取文件名并继续。我的问题是每个线程似乎处理同一个文件 4 次,因为我有 4 个线程。

我的主要目标是从队列中挑选 4 个不同的文件并独立处理它们,直到队列耗尽。

控制台上的输出是

已处理 1.txt 已处理 1.txt 已处理 1.txt 已处理 1.txt 已处理 2.txt 已处理 2.txt 已处理 2.txt 已处理 2.txt

我究竟做错了什么?

0 投票
1 回答
102 浏览

c# - 无法创建新的 ConcurrentQueue在 Windows 10 上?

我正在尝试在 Windows 10 应用程序中使用HashLib 库,但它会引发未处理的异常 ( System.MethodAccessException):

尝试通过方法 'HashLib.Hash.TransformStream(System.IO.Stream, Int64)' 访问方法 'System.Collections.Concurrent.ConcurrentQueue`1..ctor()' 失败。

没有进一步的信息。引发异常的确切行位于名为Hash.cs的 HashLib 源文件中的第 380 行:

我在 MSDN 上找不到有关此问题的任何线索。我刚刚看到即使在可移植类库中也支持它,所以我认为它也应该在普通的 Windows 10 应用程序中工作。完全相同的代码在 WPF 应用程序和 Windows 8.1 应用程序中成功使用和测试,没有任何问题。

0 投票
2 回答
1204 浏览

c# - ConcurrentQueue 中的所有项目是相同的

我有一个 NetworkStream 用于从另一个程序获取数据。数据以 Byte[64] 的形式到达,然后我将其入队到 ConcurrentQueue,以便另一个线程可以出列以便稍后进行分析。队列被实例化:

然后我将所有正在发送的数据排入队列:

然后,如果我(在调试期间)查看其中的数据,fifo就会发现其中包含的每个 byte[64] 都与最新的bytesIn. 如何确保我添加的数组fifo是值而不是指针(如果这是正确的术语)?

0 投票
0 回答
333 浏览

c# - 将类对象的并发队列转换为同一对象的可观察集合

我有一个包含类对象的并发队列,我想获取这些对象并将它们放入同一类对象的可观察集合中。(基本上将其从并发队列复制/移动到集合中。)

在这里,我在多线程过程中将元素添加到并发队列中。

然后我想把它们从中取出并放入一个可观察的集合中。没有任何重复的对象(或其中具有相同 url 的对象。

我目前收到“错误 CS1526 A new expression requires (), [], or {} after type”这可能不是最好的方法,欢迎提出任何想法。

0 投票
2 回答
1144 浏览

c# - 如何同时更新 WPF UI 线程?

我有scanario,我正在使用TPL以多线程方式从磁盘读取数据。我有 WPF GUI 作为进程的主线程,它显示从这些线程读取的数据。

如何在处理 WPF GUI 时实时更新数据?在这方面我应该如何使用 concurrentQueue 以允许工作线程和 UI 线程同时生成和使用数据?

以下是工作线程代码:

我的主要 WPF GUI 只是一个托管其他网格的普通网格。

那么如何通过使用并发队列来更新简单网格,以便我的工作线程完成其执行并且 UI 线程必须同时更新结果。

0 投票
1 回答
95 浏览

c# - 当任务执行的队列很大时可能是什么策略?

我有ConcurrentQueue TasksCollection包含ITask对象。它不是Task.Net 框架的类别。

所以,当一些事件发生时,我创建ITask并添加到ConcurrentQueue新任务。在线程循环中,我获取每个任务并执行它(同步且一致地执行一些代码。看来,我不能并发它。

所以,在我的情况下,我认为我可以清除队列并继续工作,因为我的跑步者在实时环境中工作。但是,这种情况可能存在某种模式吗?如果ConcurrentQueue计数太大该怎么办?

谢谢!

0 投票
1 回答
3240 浏览

c# - 添加列表的最快方法内容到并发队列

我正在阅读这个问题,并注意到 OP 正在迭代一个列表以将项目排队到 ConcurrentQueue 中。

这是必要的吗?

有没有办法:

  • 将大量对象添加到 ConcurrentQueue,或
  • 只需将类型化的 List 转换/转换为 ConcurrentQueue