Task任务的屏障机制

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("\n屏障中当前阶段编号:{0}\n", 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("全部加载完毕");

        }

执行结果

 

posted @ 2017-03-22 15:11  逍遥帝君  阅读(268)  评论(0编辑  收藏  举报