【发布时间】:2020-09-05 11:00:53
【问题描述】:
我有 3 个 foreach 函数,将类型/类 Person 的列表 l 写入控制台
foreach(Person p in l)
{
Console.WriteLine(p.first);
Console.WriteLine(p.last);
}
l.ForEach(p =>
{
Console.WriteLine(p.first);
Console.WriteLine(p.last);
});
Parallel.ForEach(l, p =>
{
Console.WriteLine(p.first);
Console.WriteLine(p.last);
});
他们都在做同样的事情,除了我猜 Parallel 正在处理线程。 什么时候用什么?
【问题讨论】:
-
多线程只有在事情受益于所述线程时才有意义。简单的控制台输出不会从中受益。在前两者之间,主要是基于意见
-
其中任何一个都没有“应该”。首先,你有意见,前两个是不同人的最爱,所以你不会得到的答案,你只会得到一个的答案。其次,它取决于上下文,仅当您想要并行性时才应使用并行代码,在这种情况下它可能会使输出混乱,所以我会远离它。在我看来,你应该使用第一块。
-
我认为你应该只使用
foreach,除非你从并行性中受益匪浅,并避免使用List.Foreach()。它没有增加任何功能上的好处,只是语法略有不同。问题是它仅适用于List。我见过将数组转换为列表的代码just 以使用ForEach(),这是愚蠢的。 -
为什么将数组转换为列表会很笨?将数组转换为列表后,最后写起来不是更容易吗?而不是 for(var i = 0; i
标签: c# list class foreach constructor