问题标签 [concurrent-collections]

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 投票
1 回答
150 浏览

c# - 为什么 TryPopRange 可能会出现异常?并发栈

我在 TryPopRange ConcurrentStack 方法中发现了双重标准。TryPopRange 方法的名称说,它使用 TryXXX 模式,这不应该给你例外。但是 TryPopRange 方法可以抛出 3 个不同的异常(ArgumentEx、ArgumentNullEx、ArgumentOutOfRangeEx)。好的,检查传入参数是正常的。但是,如果并发堆栈为空,我将有异常。如果一个线程将读取所有数据,并且我的线程将使用 TryPopRange 方法,那么我的读取尝试将只有一个例外。

我可以理解,他们为什么这样做?

0 投票
1 回答
141 浏览

java - 使用多线程将元素添加到 ArrayList 时,有时会给出 ConcurrentModificationException 有时不会?

ArrayList我尝试使用多线程迭代对象,但有时它会给出ConcurrentModificationException,有时不会?我无法理解这里发生了什么。

我在下面分享我的代码:

0 投票
0 回答
88 浏览

c# - 在并行 C# 中验证列表中的对象

我正在实现一个导入功能,其中我需要从用户上传的 CSV 或 Excel 文件中读取数据并运行一些验证并清理数据,然后再将数据写入数据库。

我可以将文件中的数据获取到对象列表中,其结构如下:

以下是需要在列表中的对象中进行的验证,以下是一些示例:

  1. 不允许有两个具有相同 SKU 和 OrderFulfillmentStartDate、OrderFulfillmentEndDate 的订单。
  2. 不允许有两个具有相同 SKU 且 OrderFulfillmentStartDate、OrderFulfillmentEndDate 重叠的订单。

等等

我实现它的方式:

  1. 在第一次遇到不同记录期间(通过所有验证和“ValidationErrors”== string.empty),我将记录添加到临时列表中。
  2. 在下一次迭代中,我正在使用临时列表中的记录验证当前正在处理的记录,如果验证失败,我将填充“ValidationErrors”字段并添加临时列表。

例如:

在此处输入图像描述

现在来到问题的症结所在: 数据的大小可能在 100 万行左右

当我使用 foreach 循环按顺序实施验证时,验证过程需要 8 个多小时。话虽如此,我相信并行进行验证将大大减少所需的时间。

我确实尝试使用Parallel.ForEachPartitioner概念来实现逻辑。处理确实加快了,但我不确定如何在验证期间保留一个可由 ForEach 循环中的多个线程使用/更新的临时列表。

有没有更好或更快的方法来实现我在这里尝试做的事情?请务必让我知道。

谢谢你!

0 投票
1 回答
82 浏览

c# - 等待 BlockingCollection 完成

对于多线程应用程序,我想await直到 aBlockingCollection完成并为空(IsCompleted = true)。我实现了以下,这似乎工作。

由于它是多线程的,我什至不相信我自己的影子。这会是一个健壮的实现吗?

用法: