编辑:我的问题,正如最初的措辞,暗示 SemaphoreSlim 创建和销毁线程是不准确的。重新表述为使用“插槽”而不是“线程”,我相信这样更准确。
我使用 SemaphoreSlim
类来控制我访问给定资源的速率,而且效果很好。但是,我正在努力如何动态增加和减少可用插槽的数量。
理想情况下,SemaphoreSlim 将具有具有以下特征的 Increase()
和 Decrease()
方法:
Increase()
将可用插槽的最大数量增加 1Decrease()
将可用插槽的最大数量减少 1- 这些方法不会等待,它们会立即返回
- 当达到可配置的最大槽数时,后续调用
Increase()
相当于 noop(不抛出异常) - 当达到可配置的最小槽数时,后续调用
Decrease()
相当于 noop(不抛出异常) - 当
Decrease()
被调用并且所有插槽都在使用中时,插槽的最大数量会在释放插槽时减少
是否有一个 .NET 构造允许这样的事情?
最佳答案
正如评论中已经提到的,信号量既不创建也不销毁线程。您正在描述并可能正在搜索的是 ThreadPool
的功能类(class)。它有一些方法,比如 SetMinThreads
, SetMaxThreads
, QueueUserWorkItem
并且肯定会完全按照您的意愿行事。
关于c# - 增加/减少 SemaphoreSlim 中可用插槽的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272389/