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; } } }
执行结果: