Я проделал довольно много исследований по этому вопросу, но я все еще не могу понять, что это правильно. Мне нужно создать pdf-файл с 1000 страницами (я использую библиотеку) и вам нужно сделать это N раз для разных данных. Данные независимы друг от друга, и я могу полностью генерировать это параллельно, и это то, что я пытаюсь сделать. В идеале я хотел бы, чтобы это было сделано в 10 потоках, каждый поток генерировал pdf в памяти и сохранял его в конце. Скажем, это займет 15 минут в pdf (с 1000 страниц), если я буду делать это последовательно, это будет 150 минут для 10 pdf-файлов, например, 30 минут, если я буду использовать 10 потоков. Я знаю, что люди не очень любят нить, но как я могу ускорить это в противном случае?Запуск задачи в разных потоках в консольном приложении
Я смотрел ThreadPool
, но затем я вижу это новое Task
в 4.0. Я читал, что могу заставить каждую задачу работать в отдельном потоке, если я использую TaskCreationOptions.LongRunning
, но это, похоже, не работает для меня. Я также пытался использовать ThreadPool
, но поскольку каждый PDF генерируется из URL-адреса, и по какой-то причине метод WebRequest.Create(url)
, похоже, не выполняется при вызове из threadpool? Но я предпочел бы, чтобы новая библиотека задач работала.
Это то, что у меня есть сейчас, но оно все еще похоже на выполнение последовательно.
Task myTask= Task.Factory.StartNew(() =>
{
//code for the task.
//get html content
//generate pdf file.
}
}, new CancellationToken(false), TaskCreationOptions.LongRunning, TaskScheduler.Default);
myTask.Wait();
Что я здесь делаю неправильно? Если у Вас есть предложения, пожалуйста, дайте мне знать. На данный момент я не могу идти выше .net 4.0.
Сколько задач вы создаете? Это только начинается один новый поток, а затем ждет результат – flup
Определить ... «Это, похоже, не работает для меня». Какова ваша приблизительная синхронизация, последовательная и многопоточная? – Kevin
Могу ли я предложить parallel.foreach? – redtuna