https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop
[Test]
public void ParallelTets()
{
int processCount = Environment.ProcessorCount;
Console.WriteLine($@"{nameof(Environment.ProcessorCount)} = {processCount}");
DataTable dataTable=new DataTable();
dataTable.Columns.Add("Id");
for (int i = 0; i < processCount * 10; i++)
{
DataRow dataRow = dataTable.NewRow();
dataRow["Id"] = i + 1;
dataTable.Rows.Add(dataRow);
}
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
foreach (DataRow row in dataTable.Rows)
{
Thread.Sleep(10);
Console.Write($@"{row["Id"]},");
}
Console.WriteLine();
stopwatch.Stop();
Console.WriteLine($@"No parallel takes {stopwatch.ElapsedMilliseconds} ms");
Console.WriteLine();
stopwatch.Reset();
stopwatch.Start();
Parallel.ForEach(dataTable.Rows.Cast<DataRow>(), row =>
{
Thread.Sleep(10);
Console.Write($@"{row["Id"]},");
});
Console.WriteLine();
stopwatch.Stop();
Console.WriteLine($@"With parallel takes {stopwatch.ElapsedMilliseconds} ms");
}
使用并行可能存在的问题,很重要
Potential Pitfalls in Data and Task Parallelism