private ManualResetEventSlim GetOrCreateReaderEvent()
{
ManualResetEventSlim currentEvent = _readerEvent;
if (currentEvent != null)
{
return currentEvent;
}
currentEvent = new ManualResetEventSlim(false, 0);
ManualResetEventSlim previousEvent = Interlocked.CompareExchange(ref _readerEvent, currentEvent, null);
if (previousEvent == null)
{
return currentEvent;
}
currentEvent.Dispose();
return previousEvent;
}