我已经对此做了很多研究,但我似乎仍然无法做到正确。我必须生成一个包含 1000 页的 pdf 文件(我使用库),并且需要为不同的数据执行 N 次。数据彼此独立,我完全可以并行生成,这就是我想要做的。理想情况下,我希望在 10 个线程中完成此操作,每个线程在内存中生成 pdf 并在最后保存。假设每个 pdf(1000 页)需要 15 分钟,如果我按顺序执行此操作,则 10 个 pdf 文件需要 150 分钟,而如果我使用 10 个线程则需要 30 分钟。我知道人们不太喜欢线程,但是我怎样才能加快速度呢?
我正在看,ThreadPool
但后来我Task
在 4.0 中看到了这个新功能。我读到如果我使用,我可以强制每个任务在单独的线程中运行,TaskCreationOptions.LongRunning
但这似乎对我不起作用。我也尝试使用ThreadPool
,但是由于每个 PDF 都是从 url 生成的,并且由于某种原因,WebRequest.Create(url)
从线程池调用该方法似乎不执行?但我想我宁愿让新的任务库工作。
这就是我现在所拥有的,但它似乎仍然按顺序执行。
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。