Пример #1
0
 public (T[] taskOrder, int executionDuration) Execute(TasksSchedule <T> schedule)
 {
     while (!schedule.AreAllTasksCompleted)
     {
         T?taskToExecute = schedule.GetFirstNonBlocked();
         schedule.MarkAsCompleted(taskToExecute.Value);
     }
     return(schedule.CompletedTasks.ToArray(), 0);
 }
        public (T[] taskOrder, int executionDuration) Execute(TasksSchedule <T> schedule)
        {
            var executingTasks = new List <(T ExecutingTask, int TimeLeft)>();

            int timeElapsed = 0;

            while (!schedule.AreAllTasksCompleted)
            {
                TakeNewTaskForExecution(executingTasks, schedule);
                timeElapsed++; // do work
                executingTasks = UpdateTasksAfterUnitOfExecution(executingTasks, schedule);
            }

            return(schedule.CompletedTasks.ToArray(), timeElapsed);
        }