问题标签 [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 回答
185 浏览

c# - 性能不佳的后台服务从队列中出列

我有一个HostedService继承自BackgroundService. 它循环并从Queue.

这些项目通过Controller来自 http 的请求放置在队列中。

如果我将 Postman runner 设置为每 500 毫秒触发一个项目,最多 60 个项目。一些早期的项目在几秒钟后出列,但后来可能需要 10 秒才能出列

我试过了QueueConcurrentQueueBlockingCollection。所有结果都相同。

有任何想法吗?这是我提到的任何队列类型的有效用例吗?

以下是实现细节:

登记:

后台服务:

队列:

在控制器中,最终将项目放入队列的方法:

我在日志行之间看到最多 10 秒:

将更新事件请求添加到队列

更新事件请求出队

0 投票
1 回答
98 浏览

c# - Azure 函数中的 ConcurrentQueue 出队问题

我已经声明了一个ConcurrentQueue并添加了一个 GUID 列表。添加到队列中很好,但是当我从TimerTrigger函数内部访问队列时,它似乎是空的(updateQueue.count为 0)。这种行为发生在云中,但是当我在本地执行相同的操作时,它可以正常工作。

TimerTrigger每 1 分钟执行一次时会创建日志:

updateQueue 条件之前:0

为什么updateQueue.Count总是0?我究竟做错了什么?

0 投票
1 回答
116 浏览

c# - 线程 + While(true) + 实体

我正在构建一个蜡烛记录器(Binance Crypto),对 1 分钟的蜡烛很感兴趣,包括用于市场研究目的的内部蜡烛数据(但最终我可以使用相同的代码来实际关注市场上发生的事情)

为了避免最终的延迟/EF/SQL 性能等。我决定使用两个线程来完成这个。

一个从 Binance 接收订阅的(异步)令牌并将它们放入 ConcurrentQueue,而另一个则不断尝试出列并将数据保存在 MSSQL 中

我的问题是关于第二个线程,一个 while(true) 循环。使用 EF 将这些信息单独输入(有时在 300 毫秒内 300 条信息,有时更少)时,将 200 + 信息/秒保存到 SQL 的最佳方法是什么:

每次我想保存时都应该打开 SQL con 吗?(表现)。实现这一目标的最佳方法是什么?

-- 已编辑 -- 有一次我在队列中获得了 600k+,所以我在插入 SQL 时遇到了问题 从 Linq 更改为 SQL 到 EF

这是我的实际代码:

Thx 进阶

拉斐尔

0 投票
0 回答
67 浏览

c# - 我可以使用 ConcurrentQueue 执行任务吗通过将任务(方法)作为 ConcurrentQueue.Enqueue 的参数自动传递?

我想制作一个在 ConcurrentQueue 中执行任务(方法)的队列管理器。队列管理器的功能是自动执行队列中的任何任务(方法)。为此,我尝试将任务(方法)传递到队列中,并尝试通过出队自动执行该任务(方法)。

这是主程序

下面是 BulkDataLoad 的来源。

我希望队列中的方法将通过出队自动执行。当我执行该程序时,工作并不完美。

入队效果很好。但是,出队是行不通的。当我调试程序时,调试器不会进入方法“ActionWithCode”。

我想要的是将任务作为参数传递给自动执行。不可能吗?如果是这样,我应该如何修改源?下面是 QueueManager 类源。

0 投票
1 回答
40 浏览

c# - 重建时防止访问并发队列

我有一个ConcurrentQueue包含一些辅助方法的对象,用于从队列中入队和出队。需要从队列中删除符合某些条件的项目,然后重建队列,因为它们可能不在第一个出队的项目中。

我怎样才能安全地做到这一点?

ConcurrentQueue应该是线程安全的,但我还想防止在删除和重建发生时从队列中添加/删除项目。

我正在尝试这个,但我不确定它是否正确。

我正在公开_emailMessages,但除非他们调用适当的方法,否则实际上并没有修改集合。

我想我应该在逻辑上加上一些东西,RemoveSiteEmailsAndRebuildQueue以确保在该方法执行完成之前没有任何东西会入队或出队,但我不确定那是什么。

0 投票
0 回答
59 浏览

c# - 并发队列声明静态?

我想为我的项目使用一个共享列表 (ConcurrentQueue<<>>),其中包括一个侦听器、一个处理器和一个发送器。侦听器将项目排入列表,发送者将它们从同一个列表(FIFO)中出列。处理器在两者之​​间进行一些处理。

这个想法是异步启动侦听器和发送器,同步启动处理器,但它们都访问相同的数据结构(ConcurrentQueue<>)。

我可以简单地声明一个静态ConcurrentQueue<> 还是需要一些锁定策略来避免资源争用?我的理解是 ConcurrentQueue<> 是线程安全的,我认为不需要其他代码。我的理解正确吗?

0 投票
0 回答
26 浏览

c# - 每当将项目添加到并发队列时,是否会调用任何事件?

我将一些消息存储在并发队列中,我需要在延迟一段时间后显示这些消息。所以我需要一个在将项目添加到队列后触发的事件。

0 投票
0 回答
32 浏览

c++ - 将队列容器分配给每个线程的方法

我的目的是创建队列集用于向每个线程发送数据,将队列的地址分配给每个线程,然后自由地将数据传递给队列

为此,我使用什么样的方法或容器?我想出的计划之一是通过一个向量来传递数据,该向量存储了 concurrent_queue 的地址或连接的链接列表。

但我怀疑这是否是最好的方法,以及是否真的有好方法。

0 投票
0 回答
18 浏览

c# - C# 队列管理服务覆盖值

我有一个状态机,其中包含我想跨多个状态传递数据的数据。其中一些状态将添加到任务队列中进行处理。这是我的后台队列服务。

当我将状态排入后台工作器服务时,整个队列的Data属性会发生变化,并且不会保留该特定工作项的数据。

例子:

输出:

但是,在循环的下一次迭代中,数据属性将为 2,并且它将队列中所有项目的值更改为 2。

输出:

它不保留队列中第一个工作项的原始数据对象值。

预期结果:

任何意见,将不胜感激。

0 投票
1 回答
34 浏览

.net - ConcurrentQueue<> 中的 TryDequeue 和 TryTake 有什么区别?

ConcurrentQeueue<>类中,TryDequeue()定义了额外的方法。但是,当它实现IProducerConsumerCollection<>时,它也有一个TryTake()方法。根据文档,他们都做同样的事情:

尝试出队

尝试在并发队列的开头删除并返回对象。

尝试

对于 ConcurrentQueue,此操作将尝试从 ConcurrentQueue 的开头移除对象。

为什么要为实现该TryDequeue方法而烦恼?