zoukankan      html  css  js  c++  java
  • 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("
    屏障中当前阶段编号:{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("全部加载完毕");
    
            }

    执行结果

  • 相关阅读:
    集合的整体
    StringBuffer类中的东西
    ChickHouse安装介绍
    Flink集群搭建
    hadoop-MapReduce总结
    hadoop-hdfs
    linux命令总结
    linux
    shall 2-13
    String 类的其他功能
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/6600052.html
Copyright © 2011-2022 走看看