Currently I have this code:
private async Task<(List<SomeModel> data1, List<string> data2)> ProcessFileAsync(IEnumerable<FileInfo> filesInDirectory) { var data1 = new List<SomeModel>(); var data2 = new List<string>(); var inDirectory = filesInDirectory as FileInfo[] ?? filesInDirectory.ToArray(); for (var lIndex = 0; lIndex < inDirectory.Count(); lIndex++) { var content = await File.ReadAllTextAsync(inDirectory.ElementAt(lIndex).FullName); var name = Path.GetFileNameWithoutExtension(inDirectory.ElementAt(lIndex).Name); var data1Task = GetData1Async(content, name); var data2Task = GetData2Async(content); await Task.WhenAll(data1Task, data2Task); data1.AddRange(data1Task.Result); data2.AddRange(data2Task.Result); } return (data1, data2); } The calling code:
private async Task<(List<SomeModel> data1, List<string> data2)> BatchProcessFilesAsync() { var batchSize = 4; var models = await GetDataFromSomewhereAsync().ConfigureAwait(false); var listOfRequests = new List<Task<(List<SomeModel> data1, List<string> data2)>>(); var fileModels = models.ToList(); for (var skip = 0; skip <= fileModels.Count(); skip += batchSize) { var files = fileModels.Skip(skip).Take(batchSize); listOfRequests.Add(ProcessFileAsync(files)); } // This will run all the calls in parallel to gain some performance var allFinishedTasks = await Task.WhenAll(listOfRequests).ConfigureAwait(false); The problem I am facing is if I need to add data3 in future, i have to add code here again. Is there a way to make this code Solid.
GetDataFromSomewhereAsyncandSomeModelsuggest this is obfuscated code, which is off-topic. \$\endgroup\$