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); }