В C# параллельный цикл for обеспечивает удобный способ распараллеливания итеративных вычислений, позволяющий эффективно выполнять их на многоядерных процессорах. В этой статье блога мы рассмотрим различные методы использования параллельного цикла for в C# с примерами кода. Независимо от того, являетесь ли вы новичком в параллельном программировании или хотите оптимизировать существующий код, это руководство предоставит вам знания и методы, позволяющие использовать возможности параллелизма в C#.
Методы использования Parallel For в C#:
- Базовый параллельный цикл for:
Базовый параллельный цикл for равномерно распределяет итерации по нескольким потокам.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
public static void Main()
{
Parallel.For(0, 10, i =>
{
Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
});
}
}
- Параллельно для с ParallelOptions:
ParallelOptions позволяет вам устанавливать различные параметры для управления параллельным выполнением, например максимальную степень параллелизма.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
public static void Main()
{
ParallelOptions options = new ParallelOptions
{
MaxDegreeOfParallelism = Environment.ProcessorCount // Set maximum degree of parallelism
};
Parallel.For(0, 10, options, i =>
{
Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
});
}
}
- Parallel For с ParallelLoopState:
ParallelLoopState обеспечивает контроль над параллельным циклом, позволяя останавливать или прерывать цикл в зависимости от определенных условий.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
public static void Main()
{
Parallel.For(0, 10, (i, state) =>
{
if (i == 5)
{
state.Break(); // Break the loop when i equals 5
}
Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
});
}
}
- Parallel ForEach:
Parallel.ForEach полезен, когда вам нужно перебирать коллекцию, а не диапазон чисел.
using System;
using System.Threading.Tasks;
public class ParallelForEachExample
{
public static void Main()
{
string[] fruits = { "apple", "banana", "orange", "mango" };
Parallel.ForEach(fruits, fruit =>
{
Console.WriteLine($"Processing {fruit} by thread {Task.CurrentId}");
});
}
}