C# 如何检查是否可以输入信号量LIM?

C# 如何检查是否可以输入信号量LIM?,c#,multithreading,semaphore,C#,Multithreading,Semaphore,我想以信号量lim的方式分配一个对象列表,例如,假设两个线程可以同时使用每个对象。我的计划是为列表中的每个对象创建一个SemaphoreSlim类,但我的问题是,我应该如何检查现在是否可以使用SemaphoreSlim 我不想调用Wait(),因为如果对象不可用,我可以转到列表中的下一个对象。我也不想检查CurrentCount属性,因为我认为如果多个线程同时检查CurrentCount,并且如果CurrentCount大于零,则决定调用Wait(),这将不会是线程安全的 那么,对于这种情况,理

我想以信号量lim的方式分配一个对象列表,例如,假设两个线程可以同时使用每个对象。我的计划是为列表中的每个对象创建一个SemaphoreSlim类,但我的问题是,我应该如何检查现在是否可以使用SemaphoreSlim

我不想调用Wait(),因为如果对象不可用,我可以转到列表中的下一个对象。我也不想检查CurrentCount属性,因为我认为如果多个线程同时检查CurrentCount,并且如果CurrentCount大于零,则决定调用Wait(),这将不会是线程安全的

那么,对于这种情况,理想的解决方案是什么

顺便说一句,我可以使用其他解决方案——不仅仅是信号量lim。

我怀疑您可以使用
Wait(TimeSpan.Zero)
来表示“尝试获取信号量,但如果无法立即获取,请放弃尝试。”


这是我的期望,但是文档没有明确讨论如果传入
TimeSpan.Zero
会发生什么。至少值得进一步研究这个选项,依我看。

中明确提到了它

如果超时设置为零毫秒,则该方法不会阻塞。 它测试等待句柄的状态并立即返回

我刚刚检查了一下,
Wait(int millissecondstimeout,CancellationToken CancellationToken)
有一个特例,它适用于快速失败的
0
毫秒。@Johnbot:Hooray:)谢谢检查。