CountdownEvent
CountdownEvent是一种同步结构,主要用来协调多种同步处理后的结果场景使用。其含义为:定义一个多信号的结构,然后在应用时判断信号是否全部到达,如果全部到达则继续往下运行,否则进行阻塞,有意思的是,如果阻塞已过,那么再次运行到wait()时,线程是不会再次阻塞的,除非调用reset()重新初始化后才可以。这点和其余的同步结构不一样。
示例如下:
internal class Program { static CountdownEvent e = new CountdownEvent(3); static bool isOutput = true; static int i = 0; static void Main(string[] args) { Thread t = new Thread(ProcessData); t.Start(); Console.WriteLine("启动"); i++; Console.WriteLine("信号1已到"); e.Signal(); Console.WriteLine("信号2已到"); e.Signal(); Console.WriteLine("信号3已到"); e.Signal(); Console.ReadLine(); i++; Console.WriteLine("信号1又到"); e.Signal(); Console.WriteLine("信号2又到"); e.Signal(); Console.WriteLine("信号3又到"); e.Signal(); Console.ReadKey(); } static void ProcessData() { while (isOutput) { Console.WriteLine("阻塞等待信号"); e.Wait(); Console.WriteLine("阻塞已过,处理:Processed {0}", i); e.Reset(); if (i > 1) { isOutput = false; } } if (!isOutput) { e.Dispose(); Console.WriteLine("处理完成"); } } }
运行结果: