C# Barrier简单介绍

Barrier的注释为:

使多个任务能够采用并行方式依据某种算法在多个阶段中协同工作。

代码示例:

 static void Main(string[] args)
 {
     Barrier barrier = new Barrier(4, it => {
         Console.WriteLine("再次集结,友谊万岁,再次开跑");
     });
     string[] names = { "张三", "李四", "王五", "赵六" };
     Random random = new Random();
     foreach(string name in names)
     {
         Task.Run(() => {
             Console.WriteLine($"{name}开始跑");
             int t = random.Next(1, 10);
             Thread.Sleep(t * 1000);
             Console.WriteLine($"{name}用时{t}秒,跑到友谊集结点");
             barrier.SignalAndWait();
             Console.WriteLine($"友谊万岁,{name}重新开始跑");
         });
     }
     Console.ReadKey();
 }

执行结果为:

张三开始跑
李四开始跑
王五开始跑
赵六开始跑
王五用时4秒,跑到友谊集结点
赵六用时6秒,跑到友谊集结点
张三用时7秒,跑到友谊集结点
李四用时7秒,跑到友谊集结点
再次集结,友谊万岁,再次开跑
友谊万岁,李四重新开始跑
友谊万岁,王五重新开始跑
友谊万岁,赵六重新开始跑
友谊万岁,张三重新开始跑

简的来说,假定有一个4人参加的友谊赛,4人开始跑,有的人跑的快,有的人跑的慢,但是都会在SignalAndWait处停下来,等4个人都到达SignalAndWait处后,又都开始继续往下执行了。