我有清单1:
"John Doe"
"Jack Smith"
"Peter Miller"
并在每个项目上使用一个函数:
List<Person> list2 = new List<Person>();
foreach(string name in list1) list2.Add(GetPersonByName(name));
我制作了清单2(缩短了,真正的清单有30多个属性):
{Name:"John Doe", Age:55, RoomNo:203}
{Name:"Jack Smith", Age:40, RoomNo:203}
{Name:"Peter Miller", Age:31, RoomNo:202}
到目前为止,非常好。
现在我决定并行化执行:
List<Person> list2 = new List<Person>();
Parallel.ForEach(list1, person => { list2.Add(GetPersonByName(name)); });
可能导致无序列表2。
如何有效地将list2排序为list1具有的相同顺序?
或者有没有办法告诉并行foreach执行list2.Add按输入列表的顺序? (GetPersonByName
函数很重 - 但不计算,主要是等待。)
答案 0 :(得分:4)
您应该能够使用AsParallel()
,and use the order preservation technique并行化转化,以便订单保持不变:
List<Person> list2 = list1.AsParallel().AsOrdered()
.Select(name => GetPersonByName(name))
.ToList();
编辑:添加了.AsOrdered()
以及指向MSDN文章的链接,以回应CSharpie的评论。