public void Open()
{
lock (_lockObj)
{
bool usingTaskQueue = UsingTaskQueue;
StreamState previousState;
if (ChangeState(StreamState.Open, out previousState))
{
_perfCounters.ScaleoutStreamCountOpen.Increment();
_perfCounters.ScaleoutStreamCountBuffering.Decrement();
_error = null;
if (usingTaskQueue)
{
EnsureQueueStarted();
if (previousState == StreamState.Initial && _queueBehavior == QueuingBehavior.InitialOnly)
{
_initializeDrainTask = Drain(_queue, _logger);
}
}
}
}
}