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;
}
}