在Visual Studio 2010 and .NET Framework 4 Training Kit中有个System.Threading.CountdownEvent的Demo, CountdownEvent类似于Java中有个 CountDownLatch类, 通过CountdownEvent可以在主线程中线程池中的任务运行,主线程要等待线程池中的任务完成之后才能继续。CountdownEvent Class在使用上十分的简单,只要在CountdownEvent的构造函数中传入信号量的数量。在每个线程启动的地方主线程调用AddCount方法增加信号量计数,线程池中跑的线程调用Signal。然后在主线程中调用Signal和Wait方法,就可以实现主 线程等待X次Signal方法调用之后继续。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace CountdownEventDemo { class Program { static void Main(string[] args) { var customers = Enumerable.Range(1, 20); using (var countdown = new CountdownEvent(1)) { foreach (var customer in customers) { int currentCustomer = customer; ThreadPool.QueueUserWorkItem(delegate { BuySomeStuff(currentCustomer); countdown.Signal(); }); countdown.AddCount(); } countdown.Signal(); countdown.Wait(); } Console.WriteLine("All Customers finished shopping..."); Console.ReadKey(); } static void BuySomeStuff(int customer) { // Fake work Thread.SpinWait(200000000); Console.WriteLine("Customer {0} finished", customer); } } }本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号
相关资源:七夕情人节表白HTML源码(两款)