/// <summary> /// Signals the main loop to stop. /// </summary> public void Stop() { if (State == CacheManagerState.Running) { State = CacheManagerState.Stopping; } }
/// <summary> /// The main loop in the CacheManager. Starts tasks as others finish. /// </summary> public void MainLoop() { State = CacheManagerState.Running; while (State != CacheManagerState.Stopped) { if (State == CacheManagerState.Stopping) { if (TaskAtHand != null) { TaskAtHand.Abort(); } break; } if (TaskAtHand == null) { if (Tasks.Count > 0) { StartNextTask(); } else { Thread.Sleep(100); } } else { switch (TaskAtHand.State) { case CacheTask.CacheTaskState.Running: Thread.Sleep(100); break; case CacheTask.CacheTaskState.Stopping: Thread.Sleep(10); break; case CacheTask.CacheTaskState.Aborted: case CacheTask.CacheTaskState.Complete: StartNextTask(); break; } } } State = CacheManagerState.Stopped; }