.NET并行与多线程学习系列一

时间:2021-09-08 14:59:50

并行与多线程学习系列一

一、并行初试:

 public static void test()
{
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
} public static void test1()
{
for (int i = ; i < ; i++)
{
Console.WriteLine(i + "aaaaaaaaaaaaaaa");
}
}

调用:

 static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
//串行执行:
test();
test1();
//并行执行:
Parallel.Invoke(test, test1);
sw.Stop();
Console.WriteLine("共耗费时间:");
Console.WriteLine(sw.ElapsedMilliseconds / +"s");
}

二、分区并行:

 Parallel.ForEach(Partitioner.Create(,,),(x,s)=>{
//并行代码中自定义串行,第三个参数表示item1到item2之间的范围

.NET并行与多线程学习系列一

                 Console.WriteLine(x);
for (int i = x.Item1; i < x.Item2; i++)
{
if (i == ) break; Console.WriteLine(i);
}
s.Break();// 非常类似普通for循环中的break
if (s.ShouldExitCurrentIteration)
return;
});

三、异常捕获:AggregateException

 int[] arry = new int[];

             for (int i = ; i < ; i++)
{
arry[i] = i;
}
try
{ Parallel.ForEach(arry, (x, s) =>
{
Console.WriteLine(x);
if (sw.Elapsed.Seconds > )
{
throw new TimeoutException("操作超时");
}
});
}
catch (AggregateException ex)
{
foreach (var item in ex.InnerExceptions)
{
Console.WriteLine(item);
}
}

四、指定并行调度:

 ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = ;//如果设置为1就类似于串行代码按顺序执行
options.MaxDegreeOfParallelism =Environment.ProcessorCount;//获取计算机上面的处理器数量
Parallel.For(,,options,(x) =>
{
Console.WriteLine(x);
});

五、未完待续...