У меня есть папка, содержащая несколько файлов PCL, которые необходимо преобразовать в PDF.Я могу добиться этого с помощью стороннего exe.Чтобы ускорить это, я пытаюсь запустить несколько Tasks (), каждая из которых запускает новый System.Diagnostics.Process, используя exe;
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = $@".\WinPCLtoPDF\WinPCLtoPDF.exe";
process.StartInfo.Arguments = $@"{StepParameters["StagingFileName"]} {StepParameters["StagingFileName"]}.pdf batch";
process.Start();
process.WaitForExit();
Задачи добавляются в List<Task>
, и каждая ожидаетсядо выхода из программы.
foreach (FileInfo fileInfo in files)
{
tasks.Add(ProcessDocumentTaskAsync(batchType, fileInfo, deleteOriginalFile));
while (tasks.Count < files.Count() && tasks.Where(x => !x.IsCompleted).Count() > concurrentTasks)
{
Thread.Sleep(50);
}
}
Задачи создаются с помощью метода, подобного следующему.
private async static Task ProcessDocumentTaskAsync(BatchType batchType, FileInfo fileInfo, bool deleteOriginalFile)
{
await Task.Run(() =>
{
ProcessParameters processParameters = ProcessParams();/////get process params
DocumentProcessor documentProcessor = GetDocumentProcessor(batchType, processParameters);
using (documentProcessor)
{
documentProcessor.ProcessDocument();
}
});
}
Этот шаблон работает для других задач, и вы можете увидеть из файла журнала, что заданиявыполняется асинхронно.Однако, с этим WinPCLtoPDF.exe, он, кажется, обрабатывает только один файл за раз, однако диспетчер задач показывает, что запущено несколько процессов.Процесс 1 и 2, например, будет ожидать, пока 3 запускается и заканчивается и заменяется на 4, 5 и т. Д., Пока, наконец, вся папка не будет обработана и 1, затем 2 завершена.
Могу ли я узнать, почему 1 & 2похоже блокируются и не завершаются быстро, что позволяет запускать другие задачи?