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, DownloadEntities = parameters.DownloadEntities?.ToArray(), FormatVersion = FormatVersion, LastSyncTimeInUTC = parameters.LastSyncTimeInUTC, 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, DownloadHttpTimeout = DownloadHttpTimeout }); } else { var request = new DownloadCampaignsByCampaignIdsRequest { Campaigns = parameters.CampaignIds.Select(c => new CampaignScope { CampaignId = c, ParentAccountId = _authorizationData.AccountId }).ToList(), DataScope = parameters.DataScope, DownloadFileType = parameters.FileType, DownloadEntities = parameters.DownloadEntities?.ToArray(), FormatVersion = FormatVersion, LastSyncTimeInUTC = parameters.LastSyncTimeInUTC, 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, DownloadHttpTimeout = DownloadHttpTimeout }); } }