/// <summary> /// Start All Tasks /// </summary> private void ConsumePendingScheduledTasks() { var StartedTicksIndex = new List <long>(); foreach (KeyValuePair <long, List <ScheduledTask> > tasks in ScheduledTimers.Where(ent => ent.Key <= Ticks)) { StartedTicksIndex.Add(tasks.Key); foreach (ScheduledTask taskEntry in tasks.Value) { // scope copy for thread safety var timerTask = taskEntry; var task = Task.Factory.StartNew(() => LaunchScheduledTask(timerTask)); RunningTimers.Add(new Tuple <long, Task>(Ticks, task)); } } foreach (var key in StartedTicksIndex) { ScheduledTimers.Remove(key); } }