限制许多.NET Task实例的最佳方法是什么?

GWL*_*osa 5 .net multithreading scheduling task

我创建了大量的Task实例.我需要全部运行它们,等待它们全部完成.问题是我需要确保在任何给定时间"开始"和"完成"之间不超过X个任务; 这些任务涉及对同时呼叫数量有限制的其他方的呼叫.由于这些限制不是基于我的硬件,我不能依赖任何内置的智能节流; 我需要严格执行限制.我已经能够通过让任务以线程安全的方式递增和递减共享变量来实现这一点,但它似乎不必要地繁琐.是否有一种直接内置于API的方法,或者我缺少的简单同步工具?

And*_*rey 4

您必须创建自己的任务计划程序,请参阅如何:创建限制并发度的任务计划程序

编辑:这比信号量需要更多的代码,但我有一种感觉,这可能会表现得更好,因为执行任务的线程池不知道您的信号量,但使用 TaskScheduler 是按照他们的规则进行的。

编辑2:使用信号量的可能缺点之一是线程池可能认为您的任务正在执行IO操作并一次调度它们很多(以便它们挂在那里等待,因为它们不需要CPU)。使用TaskScheduler,它们将在有位置时准确地安排。它肯定会让泳池保持清洁。