Parallel==Task+waitall(将主线程也利用了起来,改进了Task)
Invoke()
Parallel.Invoke(() => this.DoSomethingLong("btnParallel_Click_0") , () => this.DoSomethingLong("btnParallel_Click_1") , () => this.DoSomethingLong("btnParallel_Click_2") , () => this.DoSomethingLong("btnParallel_Click_3") , () => this.DoSomethingLong("btnParallel_Click_4") , () => this.DoSomethingLong("btnParallel_Click_5"));
For()
1 Parallel.For(0, 5, t => this.DoSomethingLong($"btnParallel_Click_{t}"));
Foreach() (可以利用ParallelOptions设置最大并发数)
1 Parallel.ForEach(new int[] { 1, 2, 3, 4, 5 }, t => this.DoSomethingLong($"btnParallel_Click_{t}"));
1 ParallelOptions option = new ParallelOptions() 2 { 3 MaxDegreeOfParallelism = 3//最大并发数 4 }; 5 Parallel.ForEach(new int[] { 1, 2, 3, 4, 5, 6 }, option, t => 6 { 7 this.DoSomethingLong($"btnParallel_Click_{t}"); 8 });
1 new Action(() => 2 { 3 ParallelOptions option = new ParallelOptions() 4 { 5 MaxDegreeOfParallelism = 3//最大并发数 6 }; 7 Parallel.ForEach(new int[] { 1, 2, 3, 4, 5, 6 }, option, t => 8 { 9 this.DoSomethingLong($"btnParallel_Click_{t}"); 10 }); 11 }).BeginInvoke(null, null);
线程Break和Stop
1 ParallelOptions option = new ParallelOptions() 2 { 3 MaxDegreeOfParallelism = 3//最大并发数 4 }; 5 Parallel.ForEach(new int[] { 1, 2, 3, 4, 5, 6 }, option, (t, state) => 6 { 7 this.DoSomethingLong($"btnParallel_Click_{t}"); 8 //state.Break();//这一次结束 9 //return; 10 11 state.Stop();//整个Parallel结束 12 return; 13 //不能共存 14 });