我在.NET(C#)中的多线程服务器内部创建了一些“工具”。在不影响事件的情况下检查AutoResetEvent的值
这是很容易检查.NET ManualResetEvent
的值,而不关心改变值:
aManualResetEvent.WaitOne(0);
返回一个布尔值,而无需等待的事件。
但是,我似乎无法从AutoResetEvent
获取相同的信息;如果您在set
事件上致电anAutoResetEvent.WaitOne(0)
,它将在返回(按定义)时重置事件。
我可以在这一点上确定最佳方案是改变AutoResetEvent
到ManualResetEvent
当实际测试的情况下手动复位:
ManualResetEvent theEventFormerlyKnownAsAutoResetEvent;
...
// Using the event:
if (theEventFormerlyKnownAsAutoResetEvent.WaitOne(timeout)
{
theEventFormerlyKnownAsAutoResetEvent.Reset();
...
}
...
// Instrumentation to get event state (shouldn't change anything):
bool eventIsSet = theEventFormerlyKnownAsAutoResetEvent.WaitOne(0);
// Update instrumentation
是否有检查的AutoResetEvent
状态的更好的办法?如果可能的话,我更喜欢AutoResetEvent
的内在原子性。
这将是无用的,因为其他人可能会在您检查后清除该事件。 – SLaks 2012-02-27 03:50:55
有了这个推理,视力是无用的,因为你看到的东西可能不再存在。 – 2012-02-27 03:53:52
是的,但这里的重点是原子性。 – SLaks 2012-02-27 03:55:46