C# Parallel.For的用法
我怎样才能使下面的代码并行,没有锁C# Parallel.For的用法,c#,parallel-processing,C#,Parallel Processing,我怎样才能使下面的代码并行,没有锁 List l = new List(); foreach (var item in sourceCollection) { L.Add(Process(item)); } 我更喜欢c#3.5的答案,但4.0也可以 并在循环完成后合并每个值输出 如果我们从字面上理解没有问题,只需将这些值存储在(另一个)数组中,并在循环后处理/组合它们 但我怀疑您希望在循环期间合并(添加)它们。然后没有锁 最好的解决方案似乎不是使用Parallel.Fo
List l = new List();
foreach (var item in sourceCollection)
{
L.Add(Process(item));
}
我更喜欢c#3.5的答案,但4.0也可以
并在循环完成后合并每个值输出
如果我们从字面上理解没有问题,只需将这些值存储在(另一个)数组中,并在循环后处理/组合它们
但我怀疑您希望在循环期间合并(添加)它们。然后没有锁
最好的解决方案似乎不是使用
Parallel.For()
,而是使用LINQ.aspallel()
解决方案 下面是一个示例,它可以获取一个数字序列,并行地对每个数字执行一些代价高昂的操作,然后聚合结果(不是并行地)
在代理中执行的操作中,只需注意线程安全。使用PLINQ时,假设顺序很重要:
var result = sourceCollection
.AsParalle()
.AsOrdered()
.Select(item => Process(item);
我非常怀疑您是否需要将结果作为列表,但如果您需要,您始终可以通过以下方式将结果转换为列表:
var L = result.ToList();
如果您将“返回值”和“合并…”更具体一些,这将有所帮助。这些细节很重要。@Henk,我在问题的主体部分做了一些澄清。我不介意在循环完成后将它们合并,我只想要优雅的解决方案
var L = result.ToList();