如何检查是否可以输入SemaphoreSlim?

der*_*khh 3 c# multithreading semaphore

我想以SemaphoreSlim方式分配对象列表,例如假设每个对象可以由两个线程同时使用.我的计划是为这个列表中的每个对象创建一个SemaphoreSlim类,但我的问题是我应该如何检查是否可以立即使用SemaphoreSlim?

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

那么这种情况的理想解决方案是什么?

顺便说一句 - 我可以使用其他解决方案 - 而不仅仅是SemaphoreSlim.

Jon*_*eet 6

怀疑你可以用Wait(TimeSpan.Zero)来说"尝试获取信号量,但如果不能立即这样做,就放弃尝试."

这将是我的期望,但文档没有明确谈论如果你传入会发生什么TimeSpan.Zero.值得至少进一步调查这个选项,IMO.