private async Task <BulkDownloadOperation> SubmitDownloadAsyncImpl(SubmitDownloadParameters parameters) { if (parameters.CampaignIds == null) { var request = new DownloadCampaignsByAccountIdsRequest { AccountIds = new[] { _authorizationData.AccountId }, DataScope = parameters.DataScope, DownloadFileType = parameters.FileType, Entities = parameters.Entities, FormatVersion = FormatVersion, LastSyncTimeInUTC = parameters.LastSyncTimeInUTC, LocationTargetVersion = parameters.LocationTargetVersion, PerformanceStatsDateRange = parameters.PerformanceStatsDateRange, }; DownloadCampaignsByAccountIdsResponse response; using (var apiService = new ServiceClient <IBulkService>(_authorizationData, _apiEnvironment)) { try { response = await apiService.CallAsync((s, r) => s.DownloadCampaignsByAccountIdsAsync(r), request).ConfigureAwait(false); } catch (Exception e) { throw new CouldNotSubmitBulkDownloadException("Submit download operation failed.", e); } } return(new BulkDownloadOperation(response.DownloadRequestId, _authorizationData, response.TrackingId, _apiEnvironment) { StatusPollIntervalInMilliseconds = StatusPollIntervalInMilliseconds }); } else { var request = new DownloadCampaignsByCampaignIdsRequest { Campaigns = parameters.CampaignIds.Select(c => new CampaignScope { CampaignId = c, ParentAccountId = _authorizationData.AccountId }).ToList(), DataScope = parameters.DataScope, DownloadFileType = parameters.FileType, Entities = parameters.Entities, FormatVersion = FormatVersion, LastSyncTimeInUTC = parameters.LastSyncTimeInUTC, LocationTargetVersion = parameters.LocationTargetVersion, PerformanceStatsDateRange = parameters.PerformanceStatsDateRange }; DownloadCampaignsByCampaignIdsResponse response; using (var apiService = new ServiceClient <IBulkService>(_authorizationData, _apiEnvironment)) { try { response = await apiService.CallAsync((s, r) => s.DownloadCampaignsByCampaignIdsAsync(r), request).ConfigureAwait(false); } catch (Exception e) { throw new CouldNotSubmitBulkDownloadException("Submit download operation failed.", e); } } return(new BulkDownloadOperation(response.DownloadRequestId, _authorizationData, response.TrackingId, _apiEnvironment) { StatusPollIntervalInMilliseconds = StatusPollIntervalInMilliseconds }); } }