Parallel.Invoke和Parallel.ForEach(在执行Actions时)的功能是相同的,尽管一个特别希望集合是一个数组。考虑以下示例:
List<Action> actionsList = new List<Action>
{
() => Console.WriteLine("0"),
() => Console.WriteLine("1"),
() => Console.WriteLine("2"),
() => Console.WriteLine("3"),
() => Console.WriteLine("4"),
() => Console.WriteLine("5"),
() => Console.WriteLine("6"),
() => Console.WriteLine("7"),
() => Console.WriteLine("8"),
() => Console.WriteLine("9"),
};
Parallel.ForEach<Action>(actionsList, ( o => o() ));
Console.WriteLine();
Action[] actionsArray = new Action[]
{
() => Console.WriteLine("0"),
() => Console.WriteLine("1"),
() => Console.WriteLine("2"),
() => Console.WriteLine("3"),
() => Console.WriteLine("4"),
() => Console.WriteLine("5"),
() => Console.WriteLine("6"),
() => Console.WriteLine("7"),
() => Console.WriteLine("8"),
() => Console.WriteLine("9"),
};
Parallel.Invoke(actionsArray);
Console.ReadKey();
这段代码每次运行会产生不同的输出顺序。
0 5 1 6 2 7 3 8 4 9
0 1 2 4 5 6 7 8 9 3
Parallel.ForEach(val, (array) => Sum(array));
调用了函数Sum()
,所以它可以调用一个函数。Parallel.ForEach
似乎是一个不错的选择,但如果你需要在List
的多个元素或单个元素上调用多个函数,则Parallel.Invoke
是最好的选择。