Parallel.ForEach通过输入返回顺序而不是执行到列表/字典

nik*_*nik 0 c# multithreading plinq concurrentdictionary

如果你有这个:

var resultlist = new List<Dictionary<DateTime, double>>();
Parallel.ForEach(input, item =>
{
    resultlist.Add(SomeDataDictionary(item));
});
Run Code Online (Sandbox Code Playgroud)

返回数据将按方法SomeDataDictionary返回数据的顺序排列,不会按输入顺序排列.

有没有办法保持输入的顺序?

或者是更改数据类型并使用Parallel.For循环然后将索引传递给某种类型的数组返回类型的唯一方法?

Dmi*_*nko 7

List<T>是不是线程安全的,这就是为什么resultlist.Add不正确的上下文.我建议改用PLinq:

 var reultslist = input
   .AsParallel()
   // .AsOrdered() // uncomment this if you want to preserve input order 
   .Select(item => SomeDataDictionary(item))
   .ToList(); 
Run Code Online (Sandbox Code Playgroud)