问题标签 [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.
c# - 性能不佳的后台服务从队列中出列
我有一个HostedService
继承自BackgroundService
. 它循环并从Queue
.
这些项目通过Controller
来自 http 的请求放置在队列中。
如果我将 Postman runner 设置为每 500 毫秒触发一个项目,最多 60 个项目。一些早期的项目在几秒钟后出列,但后来可能需要 10 秒才能出列。
我试过了Queue
:ConcurrentQueue
和BlockingCollection
。所有结果都相同。
有任何想法吗?这是我提到的任何队列类型的有效用例吗?
以下是实现细节:
登记:
后台服务:
队列:
在控制器中,最终将项目放入队列的方法:
我在日志行之间看到最多 10 秒:
将更新事件请求添加到队列
和
更新事件请求出队
c# - Azure 函数中的 ConcurrentQueue 出队问题
我已经声明了一个ConcurrentQueue
并添加了一个 GUID 列表。添加到队列中很好,但是当我从TimerTrigger
函数内部访问队列时,它似乎是空的(updateQueue.count
为 0)。这种行为发生在云中,但是当我在本地执行相同的操作时,它可以正常工作。
TimerTrigger
每 1 分钟执行一次时会创建日志:
updateQueue 条件之前:0
为什么updateQueue.Count
总是0?我究竟做错了什么?
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 进阶
拉斐尔
c# - 我可以使用 ConcurrentQueue 执行任务吗通过将任务(方法)作为 ConcurrentQueue.Enqueue 的参数自动传递?
我想制作一个在 ConcurrentQueue 中执行任务(方法)的队列管理器。队列管理器的功能是自动执行队列中的任何任务(方法)。为此,我尝试将任务(方法)传递到队列中,并尝试通过出队自动执行该任务(方法)。
这是主程序
下面是 BulkDataLoad 的来源。
我希望队列中的方法将通过出队自动执行。当我执行该程序时,工作并不完美。
入队效果很好。但是,出队是行不通的。当我调试程序时,调试器不会进入方法“ActionWithCode”。
我想要的是将任务作为参数传递给自动执行。不可能吗?如果是这样,我应该如何修改源?下面是 QueueManager 类源。
c# - 重建时防止访问并发队列
我有一个ConcurrentQueue
包含一些辅助方法的对象,用于从队列中入队和出队。需要从队列中删除符合某些条件的项目,然后重建队列,因为它们可能不在第一个出队的项目中。
我怎样才能安全地做到这一点?
ConcurrentQueue
应该是线程安全的,但我还想防止在删除和重建发生时从队列中添加/删除项目。
我正在尝试这个,但我不确定它是否正确。
我正在公开_emailMessages
,但除非他们调用适当的方法,否则实际上并没有修改集合。
我想我应该在逻辑上加上一些东西,RemoveSiteEmailsAndRebuildQueue
以确保在该方法执行完成之前没有任何东西会入队或出队,但我不确定那是什么。
c# - 并发队列声明静态?
我想为我的项目使用一个共享列表 (ConcurrentQueue<<>>),其中包括一个侦听器、一个处理器和一个发送器。侦听器将项目排入列表,发送者将它们从同一个列表(FIFO)中出列。处理器在两者之间进行一些处理。
这个想法是异步启动侦听器和发送器,同步启动处理器,但它们都访问相同的数据结构(ConcurrentQueue<>)。
我可以简单地声明一个静态ConcurrentQueue<> 还是需要一些锁定策略来避免资源争用?我的理解是 ConcurrentQueue<> 是线程安全的,我认为不需要其他代码。我的理解正确吗?
c# - 每当将项目添加到并发队列时,是否会调用任何事件?
我将一些消息存储在并发队列中,我需要在延迟一段时间后显示这些消息。所以我需要一个在将项目添加到队列后触发的事件。
c++ - 将队列容器分配给每个线程的方法
我的目的是创建队列集用于向每个线程发送数据,将队列的地址分配给每个线程,然后自由地将数据传递给队列
为此,我使用什么样的方法或容器?我想出的计划之一是通过一个向量来传递数据,该向量存储了 concurrent_queue 的地址或连接的链接列表。
但我怀疑这是否是最好的方法,以及是否真的有好方法。
c# - C# 队列管理服务覆盖值
我有一个状态机,其中包含我想跨多个状态传递数据的数据。其中一些状态将添加到任务队列中进行处理。这是我的后台队列服务。
当我将状态排入后台工作器服务时,整个队列的Data属性会发生变化,并且不会保留该特定工作项的数据。
例子:
输出:
但是,在循环的下一次迭代中,数据属性将为 2,并且它将队列中所有项目的值更改为 2。
输出:
它不保留队列中第一个工作项的原始数据对象值。
预期结果:
任何意见,将不胜感激。