private Task DrainPreviousQueue()
{
// If the tcs is null or complete then create a new one
if (_taskCompletionSource == null ||
_taskCompletionSource.Task.IsCompleted)
{
_taskCompletionSource = new TaskCompletionSource<object>();
}
if (_queue != null)
{
// Drain the queue when the new queue is open
return _taskCompletionSource.Task.Then((q, t) => Drain(q, t), _queue, _logger);
}
// Nothing to drain
return _taskCompletionSource.Task;
}