Parallel
1、就是对Task基础上封装多个任务,并行计算,主线程也会执行其中一个委托,本质就是Task+WaitAll
2、计算全部完成后才会进入下一行代码
3、看上去就是同步编程
4、一个亮点是可以控制同时使用的线程数量,多余任务会等待前面任务执行完之后,用空余线程执行
直接上代码了
try
{
Console.WriteLine("************开始**************");
//正常调用
Console.WriteLine("************正常调用**************");
Parallel.Invoke(
() => {Console.WriteLine("方法1"); },
() => {Console.WriteLine("方法2"); },
() => {Console.WriteLine("方法3"); },
() => {Console.WriteLine("方法4"); }
);
//Parallel.For
Console.WriteLine("************Parallel.For**************");
Parallel.For(0, 5, t =>
{
Console.WriteLine(t);
});
//Parallel.For
Console.WriteLine("************Parallel.For**************");
Parallel.ForEach(new int[]{1,2,5,4,78,5}, t =>
{
Console.WriteLine(t);
});
//控制线程数
Console.WriteLine("************ParallelOptions**************");
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 2;//每次2条线程执行
Parallel.For(0, 5,po, t =>
{
Console.WriteLine(t);
});
//退出循环 退出单次循环
Console.WriteLine("************退出单次循环**************");
Parallel.For(0, 5, (t,state) =>//参数这里需要传入state
{
Console.WriteLine(t);
if (t == 1) {
state.Break();//退出单次循环
return;//必须有
}
});
//退出循环 退出所有循环
Console.WriteLine("************退出所有循环**************");
Parallel.For(0, 5, (t, state) =>//参数这里需要传入state
{
Console.WriteLine(t);
state.Stop();//退出所有循环
return;//必须有
});
Console.WriteLine("************结束**************");
Console.Read();
}
catch (Exception ex)
{
//写日志
}