zoukankan      html  css  js  c++  java
  • C#多任务并行阶段控制—— Threading.Barrier

    有一种场景:4个人同时做某项任务,该任务分为3个阶段,必须要4个人都完成第一阶段后才可以进入第二阶段,都完成第二阶段后才可以进入第三阶段。

    此时就需要对多个并行的任务做进度控制。

    Threading.Barrier可以完成此任务:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace myTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //定义一个 barrier对象,有4个参与者,所有成员都完成一个步骤的时候,执行的action是BarrierTest方法
                //此处可用lambda表达式定义匿名方法。
                Barrier barrier = new Barrier(4, BarrierTest);
                //增加5个参与者
                barrier.AddParticipants(5);
                //增加1个参与者
                barrier.AddParticipant();
                //减去一个参与者
                barrier.RemoveParticipant();
                //减去5个参与者
                barrier.RemoveParticipants(5);
                //Thread.Task 对并行循环的支持
                Parallel.Invoke(TestMethod(barrier), TestMethod(barrier), TestMethod(barrier), TestMethod(barrier));
    
                Console.ReadLine();
            }
            private static void BarrierTest(Barrier barrier)
            {
    
                Console.WriteLine("{0}个参与者都完成了第{1}阶段", barrier.ParticipantCount, barrier.CurrentPhaseNumber);
            }
            private static Action TestMethod(Barrier barrier)
            {
                Action action = () =>
                {
                    Console.WriteLine("我完成了阶段0");
                    barrier.SignalAndWait();
                    Console.WriteLine("我完成了阶段1");
                    barrier.SignalAndWait();
                    Console.WriteLine("我完成了阶段2");
                    barrier.SignalAndWait();
                };
                return action;
            }
        }
    }

    执行结果:

  • 相关阅读:
    将cvs迁移到svn
    wincvs,cvs,svn
    Open Source Camp 北京 2008技术交流盛会 感悟
    21,22,23,24日外出纪要
    10.31,11.1外出纪要
    虚拟经济区一行有感
    29,30号活动预告
    ror 2.1.2migration
    netbeans 6.5 release
    [转载]ruby on rails 每周精选二
  • 原文地址:https://www.cnblogs.com/tzyy/p/4745447.html
Copyright © 2011-2022 走看看