Я создаю некоторые «инструменты» внутри многопоточного сервера в .NET (C #).
Довольно просто проверить значение .NET ManualResetEvent
, не беспокоясь о его изменении.:
aManualResetEvent.WaitOne( 0 );
возвращает логическое значение без ожидания события.
Однако я, похоже, затрудняюсь получить ту же информацию от AutoResetEvent
;если вы вызываете anAutoResetEvent.WaitOne( 0 )
для события set
, оно будет сбрасывать событие при возврате (по определению).
Наилучший вариант, который я могу определить на данный момент, - это изменить 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
, если это возможно.