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;
        }
    }
}

执行结果:

 

posted @ 2015-08-20 15:58  桃子夭夭  阅读(1278)  评论(0编辑  收藏  举报