private static async Task Main() { var elevator = new Elevator(); for (var i = 1; i <= 3; i++) { var agentLevel = DataGenerator.GenerateAgentLevel(); var agentCurrentFloor = DataGenerator.GenerateAgentCurrentFloor(); var agentFloorToGo = DataGenerator.GenerateAgentFloorToGo(); var agent = new Agent(i, agentLevel, agentCurrentFloor, agentFloorToGo); Task.Run(() => elevator.Call(agent)); } await elevator.Worker(); }
public async Task Worker() { while (!EmptyElevator) { foreach (var enteredAgent in _enteredAgents) { if (CurrentFloor != enteredAgent.CurrentFloor) { WaitingElevator(enteredAgent.CurrentFloor); } var hasAccess = CheckPermissions(enteredAgent); while (!hasAccess) { enteredAgent.FloorToGo = DataGenerator.GenerateAgentFloorToGo(); hasAccess = CheckPermissions(enteredAgent); } StartMoving(enteredAgent.FloorToGo); Leave(enteredAgent); } } }