Barrier 是 .Net 提供的一直并发的机制,它允许多个任务同步他们不同阶段的并发工作。
这里的关键点是【多个任务】和【不同阶段】。
假设有4个相同的任务(Task),每个任务都有4个阶段(Phase),当他们并发工作时,只有当所有任务的相同步骤都完成时,所有任务才可以开始下一个步骤。
这里的 Barrier 就是 .NetFramework 提供的一种机制。它像一个篱笆(屏障),把所有任务的阶段隔离开来,当前阶段不完成,不会开始下一个阶段。
static Task[] tasks = new Task[4]; static Barrier barrier = null; public void Test() { barrier = new Barrier(tasks.Length, (i) => { Console.WriteLine("**********************************************************"); Console.WriteLine(" 屏障中当前阶段编号:{0} ", i.CurrentPhaseNumber); Console.WriteLine("**********************************************************"); }); for (int i = 0; i < tasks.Length; i++) { tasks[i] = Task.Factory.StartNew((obj) => { var single = Convert.ToInt32(obj); Console.WriteLine("当前任务:{0}正在加载User部分数据!", single); barrier.SignalAndWait(); Console.WriteLine("当前任务:{0}正在加载Product部分数据!", single); barrier.SignalAndWait(); Console.WriteLine("当前任务:{0}正在加载Order部分数据!", single); barrier.SignalAndWait(); }, i); } Task.WaitAll(tasks); Console.WriteLine("全部加载完毕"); }
执行结果