.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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成神之路

Java微信公众平台开发_06_素材管理

2302
来自专栏王磊的博客

带毫秒的字符转换成时间(DateTime)格式的通用方法

C#自身有更好的方式,Net任意String格式转换为DateTime类型 =========================================...

2946
来自专栏web开发

java-生成任意格式的json数据

最近研究java的东西。之前靠着自己的摸索,实现了把java对象转成json格式的数据的功能,返回给前端。当时使用的是 JSONObject.fromObjec...

25710
来自专栏跟着阿笨一起玩NET

Linq to XML 读取XML 备忘笔记

本文转载:http://www.cnblogs.com/infozero/archive/2010/07/13/1776383.html

910
来自专栏JadePeng的技术博客

使用Mongodb 做对象缓存

mongodb高效的访问速度,用来快速存取数据再合适不过了,缓存神马的,可以用这个的 另外,有的时候,如果仅仅存储几条数据,单独去建立一张表代价太大,这个时候,...

4695
来自专栏大内老A

Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)

本系列的第一部分对PIAB使用场景进行了简单的介绍,作中阐述了通过PI(Policy Injection)的方式实现了Business Logic和Non-Bu...

33610
来自专栏岑玉海

WF追忆

  前一阵子学习了一下工作流,现在写个总结记录一下这个过程。要弄工作流,首先就要有个界面来画图,做web的,没办法,只能选择javascript和silverl...

2846
来自专栏Create Sun

quartz.net插件类库封装(含源码)

1、前言    最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 ...

28911
来自专栏龙首琴剑庐

Java微信支付快速入门&工具类

快速入门 1、微信支付官方在线API入口: https://pay.weixin.qq.com/wiki/doc/api/index.html 2、微信支付能力...

90812
来自专栏木宛城主

庖丁解牛看委托和事件(续)

上一篇文章:庖丁解牛——深入解析委托和事件之后,以一题面试题来总结事件 using System; using System.Collections.Gener...

3699

扫码关注云+社区

领取腾讯云代金券