问题标签 [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.
c# - 为什么 TryPopRange 可能会出现异常?并发栈
我在 TryPopRange ConcurrentStack 方法中发现了双重标准。TryPopRange 方法的名称说,它使用 TryXXX 模式,这不应该给你例外。但是 TryPopRange 方法可以抛出 3 个不同的异常(ArgumentEx、ArgumentNullEx、ArgumentOutOfRangeEx)。好的,检查传入参数是正常的。但是,如果并发堆栈为空,我将有异常。如果一个线程将读取所有数据,并且我的线程将使用 TryPopRange 方法,那么我的读取尝试将只有一个例外。
我可以理解,他们为什么这样做?
java - 使用多线程将元素添加到 ArrayList 时,有时会给出 ConcurrentModificationException 有时不会?
ArrayList
我尝试使用多线程迭代对象,但有时它会给出ConcurrentModificationException
,有时不会?我无法理解这里发生了什么。
我在下面分享我的代码:
c# - 在并行 C# 中验证列表中的对象
我正在实现一个导入功能,其中我需要从用户上传的 CSV 或 Excel 文件中读取数据并运行一些验证并清理数据,然后再将数据写入数据库。
我可以将文件中的数据获取到对象列表中,其结构如下:
以下是需要在列表中的对象中进行的验证,以下是一些示例:
- 不允许有两个具有相同 SKU 和 OrderFulfillmentStartDate、OrderFulfillmentEndDate 的订单。
- 不允许有两个具有相同 SKU 且 OrderFulfillmentStartDate、OrderFulfillmentEndDate 重叠的订单。
等等
我实现它的方式:
- 在第一次遇到不同记录期间(通过所有验证和“ValidationErrors”== string.empty),我将记录添加到临时列表中。
- 在下一次迭代中,我正在使用临时列表中的记录验证当前正在处理的记录,如果验证失败,我将填充“ValidationErrors”字段并添加临时列表。
例如:
现在来到问题的症结所在: 数据的大小可能在 100 万行左右。
当我使用 foreach 循环按顺序实施验证时,验证过程需要 8 个多小时。话虽如此,我相信并行进行验证将大大减少所需的时间。
我确实尝试使用Parallel.ForEach和Partitioner概念来实现逻辑。处理确实加快了,但我不确定如何在验证期间保留一个可由 ForEach 循环中的多个线程使用/更新的临时列表。
有没有更好或更快的方法来实现我在这里尝试做的事情?请务必让我知道。
谢谢你!
c# - 等待 BlockingCollection 完成
对于多线程应用程序,我想await
直到 aBlockingCollection
完成并为空(IsCompleted = true)。我实现了以下,这似乎工作。
由于它是多线程的,我什至不相信我自己的影子。这会是一个健壮的实现吗?
用法: