private static async Task CreateDbTargets(AzureSqlJobClient elasticJobs, CustomCollectionTargetInfo rootTarget, BackgroundTaskService.BackgroundTaskLog log , IList <DatabaseTarget> dbTargets, int pageSize, int delay) { for (int i = 0; i < dbTargets.Count; i += pageSize) { await Task.WhenAll(dbTargets.Skip(i).Take(pageSize).Select(x => CreateDbTarget(elasticJobs, rootTarget, log, x)).ToArray()); Thread.Sleep(delay); } }
private static async Task CreateDbTarget(AzureSqlJobClient elasticJobs, CustomCollectionTargetInfo rootTarget , BackgroundTaskService.BackgroundTaskLog log, DatabaseTarget dbTarget) { try { var dbTargetInfo = await elasticJobs.Targets.GetDatabaseTargetAsync(dbTarget.Server, dbTarget.Name) ?? await elasticJobs.Targets.CreateDatabaseTargetAsync(dbTarget.Server, dbTarget.Name); var result = await elasticJobs.Targets.AddChildTargetAsync(rootTarget.TargetId, dbTargetInfo.TargetId); if (!result) { throw new Exception("child target adding returns false"); } log.LogInfo("Targeting db " + dbTarget.Name + "@" + dbTarget.Server + " complete as " + dbTargetInfo.TargetId); } catch (Exception e) { log.LogException(e); throw new Exception("Targeting db " + dbTarget.Name + "@" + dbTarget.Server + " failed.", e); } }