BaconographyPortable.Services.Impl.SuspendableWorkQueueImpl.RunWorkQueue C# (CSharp) Method

RunWorkQueue() private method

private RunWorkQueue ( ) : void
return void
        private async void RunWorkQueue()
        {
            try
            {
                Tuple<TaskCompletionSource<bool>, Func<CancellationToken, Task>> workUnit = null;
                do
                {
                    lock (_lowImportanceRestartableWork)
                    {
                        if (_lowImportanceRestartableWork.Count > 0)
                        {
                            workUnit = _lowImportanceRestartableWork.Dequeue();
                        }
                        else
                            workUnit = null;
                    }

                    if (workUnit != null)
                    {
                        try
                        {
                            while (HVOCount > 0)
                            {
                                await Task.Delay(100);
                            }

                            await workUnit.Item2(_cancelationTokenSource.Token);
                            if (_cancelationTokenSource.IsCancellationRequested)
                                workUnit.Item1.SetCanceled();
                            else
                                workUnit.Item1.SetResult(true);
                        }
                        catch (Exception ex)
                        {
                            workUnit.Item1.SetException(ex);
                        }

                    }
                } while (workUnit != null && !_cancelationTokenSource.IsCancellationRequested);
            }
            finally
            {
                _taskQueueRunning = false;
            }
        }