/// <summary> /// Advances to the given target time. /// </summary> /// <param name="targetTime"></param> public void AdvanceTo(int targetTime) { if (targetTime <= time) { throw new ArgumentOutOfRangeException("targetTime", "Can only advance time forwards"); } List <int> timesToRemove = new List <int>(); foreach (var entry in actions.TakeWhile(e => e.Key <= targetTime)) { timesToRemove.Add(entry.Key); entry.Value(); context.PumpAll(); } foreach (int key in timesToRemove) { actions.Remove(key); } time = targetTime; }