CountdownEvent的使用 Task 的异步编程

本文展示了一个使用C#实现的并发队列(ConcurrentQueue)与计数器事件(CountdownEvent)的示例。通过创建一个包含10000个元素的并发队列,并使用两个异步任务消费队列中的元素,同时利用计数器事件来同步这两个任务的完成状态。
            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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值