private async Task EnsurePoolFilledAsync() { var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.EnsurePoolFilled); List <REGION> regionsToRecruitFrom = await GetRegionToRecruitFromAsync(id); while (IsRecruiting) { bool fillingUp = false; int counter = 0; int pendingCount = NationManager.GetNationCountByStatusName("pending"); while (pendingCount < _config.MinimumRecruitmentPoolSize) { if (!fillingUp) { fillingUp = true; _logger.LogInformation(id, LogMessageBuilder.Build(id, $"Filling up pending pool now from {pendingCount} to {_config.MinimumRecruitmentPoolSize}")); } PoolStatus = "Filling up with random nations"; var regionId = _rnd.Next(regionsToRecruitFrom.Count); var region = regionsToRecruitFrom.ElementAt(regionId); string nationName; do { var nationId = _rnd.Next(region.NATIONNAMES.Count); nationName = region.NATIONNAMES.ElementAt(nationId); }while (await NationManager.IsNationPendingSkippedSendOrFailedAsync(nationName) || await IsNationRecruitableAsync(new Nation() { Name = nationName, StatusTime = DateTime.UtcNow }, id)); var nation = await NationManager.GetNationAsync(nationName); if (nation != null) { await NationManager.SetNationStatusToAsync(nation, "pending"); } else { await NationManager.AddUnknownNationsAsPendingAsync(new List <string>() { nationName }, true); } counter++; pendingCount = NationManager.GetNationCountByStatusName("pending"); _logger.LogDebug(id, LogMessageBuilder.Build(id, $"Added nation '{nationName}' to pending. Now at {pendingCount} from minimum {_config.MinimumRecruitmentPoolSize}.")); } if (fillingUp) { _logger.LogInformation(id, LogMessageBuilder.Build(id, $"Filled up pending pool to minimum. (Added {counter} nations to pending.)")); PoolStatus = "Waiting for new nations"; } await Task.Delay(1800000); //30 min } }