private AutoResetEvent GetOrCreateWriterEvent()
{
AutoResetEvent currentEvent = _writerEvent;
if (currentEvent != null)
{
return currentEvent;
}
currentEvent = new AutoResetEvent(false);
AutoResetEvent previousEvent = Interlocked.CompareExchange(ref _writerEvent, currentEvent, null);
if (previousEvent == null)
{
return currentEvent;
}
currentEvent.Dispose();
return previousEvent;
}