如何检查是否可以输入SemaphoreSlim

本文关键字:输入 SemaphoreSlim 是否 何检查 检查 | 更新日期: 2023-09-27 18:17:51

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

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

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

BTW -我可以使用其他解决方案-不仅仅是SemaphoreSlim。

如何检查是否可以输入SemaphoreSlim

怀疑您可以使用Wait(TimeSpan.Zero)表示"尝试获取信号量,但如果不能立即这样做,则放弃尝试"。

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

MSDN中明确提到。

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