C#中如何使用Parallel.For和Parallel.ForEach

c#
小億
217
2023-12-19 05:33:49

在C#中,可以使用Parallel.For和Parallel.ForEach方法來(lái)實(shí)現(xiàn)并行循環(huán)。

Parallel.For方法用于并行執(zhí)行一個(gè)范圍的循環(huán)。它接受四個(gè)參數(shù):循環(huán)起始值、循環(huán)結(jié)束值、并行選項(xiàng)和循環(huán)體委托。下面是一個(gè)使用Parallel.For的示例:

Parallel.For(0, 10, i =>
{
    Console.WriteLine("Parallel.For loop: " + i);
});

上述代碼會(huì)并行執(zhí)行從0到9的循環(huán),并輸出每個(gè)循環(huán)迭代的值。

Parallel.ForEach方法用于并行執(zhí)行一個(gè)集合的循環(huán)。它接受兩個(gè)參數(shù):要循環(huán)的集合和循環(huán)體委托。下面是一個(gè)使用Parallel.ForEach的示例:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

Parallel.ForEach(numbers, number =>
{
    Console.WriteLine("Parallel.ForEach loop: " + number);
});

上述代碼會(huì)并行執(zhí)行numbers集合的循環(huán),并輸出每個(gè)元素的值。

在使用Parallel.For和Parallel.ForEach時(shí),需要注意以下幾點(diǎn):

  • 循環(huán)體委托應(yīng)該是線程安全的,以避免競(jìng)態(tài)條件和其他并發(fā)問(wèn)題。
  • 可以使用ParallelOptions類來(lái)設(shè)置并行選項(xiàng),例如設(shè)置最大并行度和取消標(biāo)記等。
  • 并行循環(huán)的執(zhí)行順序是不確定的,因此循環(huán)體委托應(yīng)該是無(wú)副作用的。
  • 并行循環(huán)適用于大規(guī)模的循環(huán),對(duì)于小規(guī)模的循環(huán)可能會(huì)引入額外的開(kāi)銷。在選擇使用并行循環(huán)時(shí),需要根據(jù)具體情況進(jìn)行權(quán)衡和測(cè)試。

0