CountdownEvent的使用 Task 的异步编程

            ConcurrentQueue<int> queue = new ConcurrentQueue<int>(Enumerable.Range(0,10000));
            CountdownEvent cde = new CountdownEvent(10000);

            //This is the logic for all queue consumers
            Action consumer = () =>
             {
                 int local;
             while (queue.TryDequeue(out local))
                 {
                     Console.WriteLine(Task.CurrentId.Value);
                     cde.Signal(); // 1万个Signal;
                 }
               
             };


            //Now empty the queue with a couple of asynchronous tasks
            Task t1 = Task.Factory.StartNew(consumer);
            Task t2 = Task.Factory.StartNew(consumer);

            //And wait for queue to empty by waiting on cde
            cde.Wait(); //will return when cde count reaches 0

            Console.WriteLine("Done emptying queue. InitialCount={0},CurrentCount={1},IsSet={2}", cde.InitialCount, cde.CurrentCount, cde.IsSet);

            Task.WaitAll(t1, t2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值