Parallel 并行编程

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 });

猜你喜欢

转载自www.cnblogs.com/anwser-jungle/p/8881655.html
今日推荐