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

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

目录
相关文章
|
8月前
|
XML SQL 开发框架
|
8月前
|
算法 Java 调度
java.net.SocketException: Unexpected end of file from server
java.net.SocketException: Unexpected end of file from server
|
7月前
|
算法 安全 Java
【.NET Core】 多线程之(Thread)详解
【.NET Core】 多线程之(Thread)详解
92 1
|
安全 C# 开发者
【.Net实用方法总结】 整理并总结System.IO中Directory类及其方法介绍
本文主要介绍System.IO命名空间的Directory类,介绍其常用的方法和示例说明。
【.Net实用方法总结】 整理并总结System.IO中Directory类及其方法介绍
一起谈.NET技术,System.DateTime详解
  最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是如何有效地进行时间的处理以提供对跨时区的支持。对于一个分布式的应用来说,倘若客户端和服务端部署与不同的地区,在对时间进行处理的时候,就需要考虑时区的问题。
811 0
一起谈.NET技术,System.DateTime 详解(续)
  在《System.DateTime 详解》一文中,我们从跨时区的角度剖析了我们熟悉的System.DateTime类型。如果你还是采用传统的ADO.NET编程方式,并使用DataSet作为数据实体,可能你会熟悉System.Data.DataSetDateTime这么一个类型。
1049 0
.Net中stirng转System.Type的一种实现思路
今天在上班的过程中,许长时间未联系的大学小伙伴发来消息,带着一个疑问来找我。     他的需求是type动态添加,这对我来说当然很easy,用泛型就好了, 随后,手起刀落,Demo就写出来,如下: 写了一个方法,传入T进行了where T:class约束,,如此easy,小伙伴怎么不会呢?然而事情并非如此简单。
1013 0