1. 程式人生 > >[.net 多線程]CountdownEvent

[.net 多線程]CountdownEvent

con d+ -s ons sys key pan 阻塞 bar

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更加方便。

[.net 多線程]CountdownEvent