按list1排序list2

时间:2015-01-22 17:22:43

标签: c# linq parallel-processing

我有清单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函数很重 - 但不计算,主要是等待。)

1 个答案:

答案 0 :(得分:4)

您应该能够使用AsParallel()and use the order preservation technique并行化转化,以便订单保持不变:

List<Person> list2 = list1.AsParallel().AsOrdered()
    .Select(name => GetPersonByName(name))
    .ToList();

编辑:添加了.AsOrdered()以及指向MSDN文章的链接,以回应CSharpie的评论。