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