using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; namespace file_finder__test; public class FileClassifier { public async Task<(List musicFiles, List videoFiles)> ClassifyFilesAsync( List allFiles, List musicExtensions, List videoExtensions) { int coreCount = Environment.ProcessorCount; int totalFiles = allFiles.Count; int chunkSize = (int)Math.Ceiling((double)totalFiles / coreCount); var musicBag = new ConcurrentBag(); var videoBag = new ConcurrentBag(); var tasks = new List(); for (int i = 0; i < coreCount; i++) { int start = i * chunkSize; int end = Math.Min(start + chunkSize, totalFiles); tasks.Add(Task.Run(() => { for (int j = start; j < end; j++) { string file = allFiles[j]; string ext = Path.GetExtension(file)?.ToLowerInvariant(); if (ext == null) continue; if (musicExtensions.Contains(ext)) musicBag.Add(file); else if (videoExtensions.Contains(ext)) videoBag.Add(file); } })); } await Task.WhenAll(tasks); return (new List(musicBag), new List(videoBag)); } }