[.net 多线程]CountdownEvent

System.Threading.CountdownEvent 是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定。CountdownEvent在初始化时有一个初始计数量,在每个工作项在完成时调用  Signal每次调用Signal 时,信号计数都会递减 1。 在主线程上,对 Wait 的调用将会阻塞,直至信号计数为零。
 
 1 static void Main(string[] args)
 2 {
 3     CountdownEvent countdown = new CountdownEvent(3);
 4     int taskid = 1;
 5     for (var i = 0; i < 3; i++)
 6     {
 7         Task.Factory.StartNew(() =>
 8         {
 9             int cur = taskid++;
10             Console.WriteLine($"Task[{cur}] is Running");
11             Thread.Sleep(taskid * 1000);
12             countdown.Signal();
13             Console.WriteLine($"Task[{cur}] exit");
14         });
15     }
16     Console.WriteLine($"Main wait");
17     countdown.Wait();
18     Console.WriteLine($"Main exit");
19     Console.ReadKey();
20 }
CountdownEvent 示例代码

CountdownEvent 与Barrier类似,但是在多次等待中,使用Barrier更加方便。

猜你喜欢

转载自www.cnblogs.com/deepminer/p/9053493.html