.NET 4 System.Threading.CountdownEvent

时间:2022-04-25
本文章向大家介绍.NET 4 System.Threading.CountdownEvent,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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); 
        } 
    } 
}

相关文章:Fork/Join parallelism with .NET CountdownEvent