public void RunJobs()
{
while (true)
{
Job job;
lock (_queue)
{
if (_queue.Count == 0)
{
return;
}
job = _queue.Dequeue();
}
if (job.TaskCompletionSource == null)
{
job.Action();
}
else
{
try
{
job.Action();
job.TaskCompletionSource.SetResult(null);
}
catch (Exception e)
{
job.TaskCompletionSource.SetException(e);
}
}
}
}