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();