net 多线程 学习 31 CountdownEvent 锁 限制最大线程数


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CountdownEventDemo
{
    class Program
    {
        // 限制线程数的一个机制
        // 让线程池使用的线程的数量不能超过这个限制
        static CountdownEvent cdeLock = new CountdownEvent(10);
        static void Main(string[] args)
        {
            //CountdownEvent的线程的数量不能超过12个
            cdeLock.Reset(12);
            for (int i = 0; i < 10; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    LoadOrders();
                });
            }
            //相当于我们的Task.WaitAll
            cdeLock.Wait();
            Console.WriteLine("所有的Orders都加载完毕。。。。。。。。。。。。。。。。。。。。。");
            
            Console.Read();
        }

        /// <summary>
        /// 10 threads
        /// </summary>
        static void LoadOrders()
        {
            //具体的业务逻辑,不细说
            Console.WriteLine("当前Orders正在加载中。。。{0}", Thread.CurrentThread.ManagedThreadId);
            // 将当前的线程的数量减一
            cdeLock.Signal();
        }

    }
}



作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1