public override void Process(int currentTime) { if (ReadyTasks.Count == 0) { return; } var processingTime = 1 / (float)ReadyTasks.Count; while (ReadyTasks.Any()) { TrySetCurrentTaskFromReadyTasks(); ProcessCurrentTask(currentTime, processingTime); } //ReadyTasks queue is empty, we add tasks that are not finished in current iteration, for next iterations ReadyTasks.AddRange(_tasksNoFinishedInCurrentIteration); _tasksNoFinishedInCurrentIteration.Clear(); }
private bool CheckIfCurrentTaskIsBest(int currentTime) { if (_currentTaskIsSecondTier && ReadyTasks.Any()) { //we have better task in ReadyTasks TrySetCurrentTaskFromReadyTasks(); //replaces CurrentTask with task from ReadyTasks, "old" CurrentTask from _secondTierList in still first on list _currentTaskIsSecondTier = false; } CurrentTask.WaitingTime = GetTaskWaitingTime(currentTime, CurrentTask); if (CurrentTask.IsDelayed && ReadyTasks.Any()) { _secondTierTasks.Add(CurrentTask); //already delayed, we take next task TrySetCurrentTaskFromReadyTasks(); return(false); //we have to check task, that just have been assigned as CurrentTask } return(true); //task is not delayed, or delayed, but we don't have any more tasks //TODO: priority: we shoud check if secondTierTasks contains better task }