[.net 多線程]CountdownEvent
阿新 • • 發佈:2018-05-17
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 forCountdownEvent 示例代碼(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 與Barrier類似,但是在多次等待中,使用Barrier更加方便。
[.net 多線程]CountdownEvent