public void GenerateNextState() { UpdateStatus(); if (p2.IsBlock()) { if (p2.IsComplate()) { p2.Task.IsExit = true; outputTasks.Add(p2.Task); p2.Clean(); } } if (p1.IsBlock()) { if (p1.IsComplate()) { if (p2.IsBlock()) { outputTasks.Add(p1.Task); } else { p2.Task = p1.Task; } p1.Clean(); } } if (!queue.IsQueueEmpty()) { if (!p1.IsBlock()) { p1.Task = queue.RemoveTask(); } } if (p.IsComplate()) { var newTask = new Task(++countOfTasks); if (!p1.IsBlock()) { p1.Task = newTask; } else { if (!queue.IsBlock()) { queue.AddTask(newTask); } else { outputTasks.Add(newTask); } } } queue.UpdateTimeForTask(); }