C# – Parallel.Invoke和Parallel.ForEach本质上是一回事吗?
并且通过“同样的事情”我的意思是这两个操作基本上做同样的工作,它只是归结为哪个更方便根据你必须使用的工作进行调用? (即代表列表或迭代的事项列表)? 我一直在搜索MSDN,StackOverflow和各种随机文章,但我还没有找到一个明确的答案。
编辑: 我应该更清楚; 我问这两种方法是否做同样的事情,因为如果他们不这样做,我想了解哪种方法会更有效率。
示例:我有500个键值的列表。 目前我使用foreach循环遍历列表(连续)并执行每个项目的工作。 如果我想利用多个内核,我应该简单地使用Parallel.ForEach吗? 让我们说为了参数的缘故,我为这500个任务提供了500个代表的数组 – 是否会产生任何不同的调用Parallel.Invoke,给它一个500个代表的列表?
提前谢谢了!
Parallel.ForEach
遍历元素列表,可以对数组元素执行某些任务。
例如。
Parallel.ForEach(val, (array) => Sum(array));
Parallel.Invoke
可以Parallel.Invoke
调用许多函数。
例如。
Parallel.Invoke( () => doSum(array), () => doAvg(array), () => doMedian(array));
从上面的示例中,您可以看到它们的function不同。 ForEach
遍历元素List
并在每个元素上并行执行一个任务 ,而Invoke
可以在一个元素上并行执行许多任务 。
Parallel.Invoke和Parallel.ForEach(用于执行Actions时)function相同,虽然是的,特别希望集合是一个数组。 请考虑以下示例:
List actionsList = new List { () => 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 (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
我正试图找到一种好方法来表达它; 但他们不是一回事。
原因是,Invoke适用于Action of Action,而ForEach适用于Action的List(特别是IEnumerable); 列表与力学中的数组明显不同,尽管它们暴露了相同类型的基本行为。
我不能说实际上有什么区别因为我不知道,所以请不要接受这个答案(除非你真的也想要!)但是我希望它能慢慢记住机制的内存。
+1也是一个好问题。
编辑; 我突然想到还有另一个答案; Invoke可以在动态动作列表上工作; 但Foreach可以使用Generic IEnumerable of Actions,并使您能够使用条件逻辑,Action by Action; 所以你可以在每个Foreach迭代中说Action.Invoke()之前测试一个条件。
上述就是C#学习教程:C# – Parallel.Invoke和Parallel.ForEach本质上是一回事吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/954316.html