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

QueueLowImportanceRestartableWork() public method

public QueueLowImportanceRestartableWork ( Task>.Func work ) : Task
work Task>.Func
return Task
        public Task QueueLowImportanceRestartableWork(Func<System.Threading.CancellationToken, Task> work)
        {
            bool needsToStartTaskQueue = false;
            TaskCompletionSource<bool> completionSource = new TaskCompletionSource<bool>();
            lock (_lowImportanceRestartableWork)
            {
                _lowImportanceRestartableWork.Enqueue(Tuple.Create(completionSource, work));

                if (_lowImportanceRestartableWork.Count == 1 || !_taskQueueRunning)
                {
                    needsToStartTaskQueue = true;
                    _taskQueueRunning = true;
                }
            }

            if (needsToStartTaskQueue)
            {
                Task.Factory.StartNew(RunWorkQueue, _cancelationTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
            }

            return completionSource.Task;
        }
        CancellationTokenSource _cancelationTokenSource = new CancellationTokenSource();