我想以SemaphoreSlim方式分配对象列表,例如假设每个对象可以由两个线程同时使用。我的计划是为这个列表中的每个对象创建一个SemaphoreSlim类,但我的问题是我应该如何检查是否可以立即使用SemaphoreSlim?
我不想调用Wait(),因为如果一个对象不可用,我可以转到列表中的下一个。我不想检查CurrentCount属性,因为如果多个线程同时检查了CurrentCount并且如果CurrentCount大于零则决定调用Wait(),我不认为它是线程安全的。
那么这种情况的理想解决方案是什么?
BTW - 我可以使用其他解决方案 - 而不仅仅是SemaphoreSlim。
答案 0 :(得分:6)
我怀疑您可以使用Wait(TimeSpan.Zero)
说“尝试获取信号量,但如果您不能立即停止尝试,请放弃尝试。”
这是我的期望,但文档没有明确说明如果你传入TimeSpan.Zero
会发生什么。值得至少进一步调查这一选择,IMO。
答案 1 :(得分:2)
在MSDN中明确提及。
<块引用>如果超时设置为零毫秒,则该方法不会阻塞。 它测试等待句柄的状态并立即返回。