public async Task <string> GenerateReport(IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { var fileName = _fileNameService.GetFilename(reportServiceContext, ReportFileName, OutputTypes.Csv); var paymentsTask = _appsAdditionalPaymentsDataProvider.GetPaymentsAsync(reportServiceContext, cancellationToken); var learnersTask = _appsAdditionalPaymentsDataProvider.GetLearnersAsync(reportServiceContext, cancellationToken); var contractAllocationsTask = _appsAdditionalPaymentsDataProvider.GetAecLearningDeliveriesAsync(reportServiceContext, cancellationToken); var priceEpisodesTask = _appsAdditionalPaymentsDataProvider.GetPriceEpisodesAsync(reportServiceContext, cancellationToken); await Task.WhenAll(paymentsTask, learnersTask, contractAllocationsTask, priceEpisodesTask); var model = _appsAdditionalPaymentsModelBuilder.Build( paymentsTask.Result, learnersTask.Result, contractAllocationsTask.Result, priceEpisodesTask.Result); await _csvFileService.WriteAsync <AppsAdditionalPaymentReportModel, AppsAdditionalPaymentsClassMap>(model, fileName, reportServiceContext.Container, cancellationToken, null, null); var persistModels = _appsAdditionalPaymentPersistanceMapper.Map(reportServiceContext, model, cancellationToken); await _persistanceService.PersistAsync(reportServiceContext, persistModels, cancellationToken); return(fileName); }