我在管理多个模块中的资源时遇到了一些问题,这些模块只能安全地访问一次。异常后的信号灯超时
所以我尝试了一个名为Semaphore
这样的:
var semaphore = new Semaphore(1, 1, "_UGLY_SEMAPHORE_NAME_");
try
{
var signaled = semaphore.WaitOne(120000); // 2 minutes
if (!signaled)
{
return;
}
// Access the resource...
}
finally
{
semaphore.Release();
}
在其他模块我用
var signaled = semaphore.WaitOne(0);
,因为如果没有其他事情做资源只能被访问。 6秒后稳定返回,所以2分钟应该足够我相信。
所以,问题是:
如果第一个代码块,事后Semaphore.WaitOne(发生异常) 经常遇到超时。有什么我做错了。
哪里发生异常?它是在“//访问资源...”,还是在谈论奇怪的边缘情况,并在异常的地方使用类似线程异常终止的异常? – Servy
是的。它在该代码之外被处理,并且最终被调用。我对“发布递增和WaitOne递减”部分感到困惑。 –
然后查看“Semaphore”的文档,或者查看Google上的文档;这是一个相当明确的CS概念。 – Servy