public void Run() { int agentTypeId; int agentToDeleteId; int counter; List <SpotsPerServer> agentsPerServer = new List <SpotsPerServer>(); while (_agentsToDelete.Count > 0) { _logger.LogDebug(string.Format("{0} AgentsDesiredObjects to be deleted", _agentsToDelete.Count)); counter = _agentsToDelete.Count - 1; while (counter >= 0) { _agentsToDelete[counter].Count = Math.Abs(_agentsToDelete[counter].Count); agentTypeId = _environment.GetArtifactIdFromGuid(_agentsToDelete[counter].Guid); agentsPerServer = _environment.GetAgentsPerServerByPool(agentTypeId, _poolId); if (agentsPerServer.Count > 0) { agentsPerServer = agentsPerServer.OrderByDescending(x => x.Spots).ToList(); if (agentsPerServer[0].Spots > 0) { agentToDeleteId = _deleteAgent.GetAgentIdToDelete(agentTypeId, agentsPerServer[0].AgentServerArtifactId); _deleteAgent.Delete(agentToDeleteId); _agentsToDelete[counter].Count -= 1; if (_agentsToDelete[counter].Count < 1) { _agentsToDelete.Remove(_agentsToDelete[counter]); } } else { _agentsToDelete.Remove(_agentsToDelete[counter]); } } else { _agentsToDelete.Remove(_agentsToDelete[counter]); } counter -= 1; } } }