我在.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