public async Task <ReturnCode> SuperviseWork() { var result = ReturnCode.Failure; try { // Get files to process. var filesToProcess = _fileProcessor.GetEdiFilesToProcess(); if (filesToProcess.Any()) { var resultCollection = new ConcurrentBag <IEnumerable <TS837> >(); var transactions = Parallel.ForEach(filesToProcess, (file) => { resultCollection.Add(_fileProcessor.GetAllTransactionsFromFile(file)); }); // Do whatever you want with resultCollection. // Return success. result = ReturnCode.TotalSuccess; } else { // Add logging. } } catch (SqlException ex) { // Add logging. // Return SqlException code. result = ReturnCode.SqlException; } catch (Exception ex) { // Add logging. // Return UnexpectedException code. result = ReturnCode.UnexpectedException; } return(result); }