private void CleanseQueueOfExpiredExecutions(CriticalSectionState csState, List <TaskExecutionState> taskExecutionStates, List <CriticalSectionQueueItem> csQueue)
{
var validQueuedExecutions = (from tes in taskExecutionStates
join q in csQueue on tes.TaskExecutionId equals q.TaskExecutionId
where HasCriticalSectionExpired(tes) == false
select q).ToList();
if (validQueuedExecutions.Count != csQueue.Count)
{
var updatedQueue = new List <CriticalSectionQueueItem>();
int newQueueIndex = 1;
foreach (var validQueuedExecution in validQueuedExecutions.OrderBy(x => x.Index))
{
updatedQueue.Add(new CriticalSectionQueueItem(newQueueIndex, validQueuedExecution.TaskExecutionId));
}
csState.UpdateQueue(updatedQueue);
}
}