C#下如何控制并发运行的Task数量

首先需要说明的是Task不等于Thread,只是微软默认实现ThreadPoolTaskScheduler是依赖于线程池的,因为该类的可访问性为internal,所以我们在实际编码中无法直接在代码中new这么一个Scheduler出来,只能通过TaskScheduler.Default间接的来使用

好了上面好像偏题了,回到原题,为什么需要控制Task数量?假设有这样一个场景,有一批Task需执行,假设数量有1万,每个Task执行完毕均需1~5秒钟时间,如果用默认的TaskScheduler.Default,因为其MaximumConcurrencyLevel是Int32.MaxValue,也就是最大它允许2147483647个Task同时执行,试想下这么多TaskCreationOptions.LongRunning的Task在那里等待CPU调度执行,不管是对电脑,还是等待处理结果的人们,这都完全是个灾难!所以我们应该人为的控制下同时存在的Task数量,正确的说,应该是控制同时执行的Task数量

所以按这个思路扩散开去,我们完全可以在Task创建时进行控制,所以就有了下面的demo代码

        static object lockObj = new object();
        stat
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值