У меня есть сценарий, в котором я должен обрабатывать несколько файлов (например, 30) параллельно на основе процессорных ядер. Я должен назначить эти файлы для разделения задач на основе отсутствия процессорных ядер. Я не знаю, как сделать начальный и конечный предел каждой задачи для обработки. Например, каждая задача знает, сколько файлов она должна обрабатывать.Как обрабатывать файлы каталога в параллельной библиотеке задач?
private void ProcessFiles(object e)
{
try
{
var diectoryPath = _Configurations.Descendants().SingleOrDefault(Pr => Pr.Name == "DirectoryPath").Value;
var FilePaths = Directory.EnumerateFiles(diectoryPath);
int numCores = System.Environment.ProcessorCount;
int NoOfTasks = FilePaths.Count() > numCores ? (FilePaths.Count()/ numCores) : FilePaths.Count();
for (int i = 0; i < NoOfTasks; i++)
{
Task.Factory.StartNew(
() =>
{
int startIndex = 0, endIndex = 0;
for (int Count = startIndex; Count < endIndex; Count++)
{
this.ProcessFile(FilePaths);
}
});
}
}
catch (Exception ex)
{
throw;
}
}
Задача-параллельная библиотека будет посвящена многоядерной архитектуре под капотом. Нам не нужно заботиться о доступных системных ядрах при создании задач. – William
Я определенно не эксперт в параллельной библиотеке задач, но не TPL должен сам обрабатывать количество ядер процессора и определять лучший способ «разделить» рабочую нагрузку? –
Здесь может быть проблема, если в каталоге 100 файлов, не будет хорошей идеей создать 100 задач. Таким образом, вы можете использовать цикл Parallel.For. Он будет внутренне создавать разделы и будет устанавливать параллельную обработку, полагаясь на собственный разделитель. – Usman