gpt4 book ai didi

c# - 使用并行库添加到列表时保证线程安全的正确方法

转载 作者:太空狗 更新时间:2023-10-30 00:20:51 39 4
gpt4 key购买 nike

我遍历一组连接字符串,并在每个循环中提取一些信息并添加到列表中。现在,我想使用 Parallel 库使其成为多线程,但我不确定该库是否保证对列表的写入是线程安全的,或者我是否需要使用锁定:

List<SomeType> list = new List<SomeType>();

settings.AsParallel().ForAll(setting =>
{
list.AddRange(GetSomeArrayofSomeType(setting)); /// DO I NEED TO DO LOCKING HERE???
})

最佳答案

写入列表对于多线程写入确实不安全。您需要使用 lock 来同步访问,或者使用像 ConcurrentQueue 这样专为多线程访问而设计的集合。

锁定示例(假设 list 是方法的局部)

List<SomeType> list = new List<SomeType>();
settings.AsParallel().ForAll(setting => {
lock (list) {
list.AddRange(GetSomeArrayofSomeType(setting));
}
});

或者更好的是使用 SelectMany 而不是 ForEach

var list = settings
.AsParallel()
.SelectMany(setting => GetSomeArrayOfSomeType(setting))
.ToList();

关于c# - 使用并行库添加到列表时保证线程安全的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796506/

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