gpt4 book ai didi

c# - ConcurrentBag - 添加多个项目?

转载 作者:IT王子 更新时间:2023-10-29 04:04:43 25 4
gpt4 key购买 nike

有没有办法一次将多个项目添加到 ConcurrentBag,而不是一次添加一个?我没有在 ConcurrentBag 上看到 AddRange() 方法,但是有一个 Concat()。但是,这对我不起作用:

ConcurrentBag<T> objectList = new ConcurrentBag<T>();

timeChunks.ForEach(timeChunk =>
{
List<T> newList = Foo.SomeMethod<T>(x => x.SomeReadTime > timeChunk.StartTime);
objectList.Concat<T>(newList);
});

此代码以前位于 Parallel.ForEach() 中,但我将其更改为上面的代码以便我可以对其进行故障排除。变量 newList 确实有对象,但是在 objectList.Concat<> 行之后,objectList 中始终有 0 个对象。 Concat<> 不是那样工作的吗?我是否需要使用 Add() 方法一次向 ConcurrentBag 添加一个项目?

最佳答案

(我知道这是一篇旧帖子,我想我会添加一些东西)。

正如其他人所说:是的,您需要将它们一一添加。在我的例子中,我添加了一个小的扩展方法来让事情变得更干净一些,但在引擎盖下它做了同样的事情:

public static void AddRange<T>(this ConcurrentBag<T> @this, IEnumerable<T> toAdd)
{
foreach (var element in toAdd)
{
@this.Add(element);
}
}

然后:

ConcurrentBag<int> ccBag = new ConcurrentBag<int>();
var listOfThings = new List<int>() { 1, 2, 4, 5, 6, 7, 8, 9 };
ccBag.AddRange(listOfThings);

我还研究了使用 AsParallel 在扩展方法中添加,但是在运行了一些关于添加各种大小的字符串列表的测试之后,与传统的 for 循环相比,使用 AsParallel(如此处所示)的速度始终较慢.

public static void AddRange<T>(this ConcurrentBag<T> @this, IEnumerable<T> toAdd)
{
toAdd.AsParallel().ForAll(t => @this.Add(t));
}

关于c# - ConcurrentBag - 添加多个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10177768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com