在我的项目中,我有ConcurrentDictionary<int, SemaphoreSlim>
。
我的应用程序查找已经通过键创建了SemaphoreSlim。如果它不存在 - 创建新的并将其放入字典。
在某些时候,我等待这个信号量,然后释放。 释放后,信号量应用程序应该决定从字典中删除这个信号量 - 或者只是因为已经有另一个步骤等待释放这个特定的信号量。 我使用这段代码:
semaphore.Release();
if(semaphore.CurrentCount == 0)
{
Dicitionary.TryRemove(key, out semaphore);
}
在这里,我遇到了问题。在Release()
信号量CurrentCount
为0之后的某个时刻,但是当线程开始从字典中删除它时 - 另一个线程等待此信号量。
结果 - 信号量从字典中删除,不能发布(我使用字典作为存储)。
有人可以建议如何避免这种行为。