private void InstallWorkloadsWithInstallRecord(IEnumerable <WorkloadId> workloadIds, SdkFeatureBand sdkFeatureBand) { if (_workloadInstaller.GetInstallationUnit().Equals(InstallationUnit.Packs)) { var installer = _workloadInstaller.GetPackInstaller(); var workloadPackToInstall = workloadIds .SelectMany(workloadId => _workloadResolver.GetPacksInWorkload(workloadId.ToString())) .Distinct() .Select(packId => _workloadResolver.TryGetPackInfo(packId)); TransactionalAction.Run( action: () => { foreach (var packId in workloadPackToInstall) { installer.InstallWorkloadPack(packId, sdkFeatureBand); } foreach (var workloadId in workloadIds) { _workloadInstaller.WriteWorkloadInstallationRecord(workloadId, sdkFeatureBand); } }, rollback: () => { foreach (var packId in workloadPackToInstall) { installer.RollBackWorkloadPackInstall(packId, sdkFeatureBand); } foreach (var workloadId in workloadIds) { _workloadInstaller.DeleteWorkloadInstallationRecord(workloadId, sdkFeatureBand); } }); } else { var installer = _workloadInstaller.GetWorkloadInstaller(); foreach (var workloadId in workloadIds) { installer.InstallWorkload(workloadId); } } }