我有4个任务来比较两个PDF的字体系列和字体样式。如果我连续执行这4项任务,则需要很长时间。如果我并行运行它们,结果文本就不正确了。
public void Compare_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(firstpdffont_compare));
ThreadPool.QueueUserWorkItem(new WaitCallback(secondpdffont_compare));
ThreadPool.QueueUserWorkItem(new WaitCallback(firstpdf_fontstyle_compare));
ThreadPool.QueueUserWorkItem(new WaitCallback(secondpdf_fontstyle_compare));
//----after this append function which is not in thread
Appendresult();
}
如何成功并行化这些任务?
答案 0 :(得分:3)
您的问题很可能是在调用Appendresult()
之前需要等待任务完成;但是,ThreadPool.QueueUserWorkItem
将任务排队但不等待它完成,因此您过早地调用Appendresult()
。
您可以使用TPL和Task.WaitAll方法。协调比线程池方法更容易:
var compareTasks = new Task[] {
Task.Factory.StartNew(_ => firstpdffont_compare, null),
Task.Factory.StartNew(_ => secondpdffont_compare, null),
Task.Factory.StartNew(_ => firstpdf_fontstyle_compare, null),
Task.Factory.StartNew(_ => secondpdf_fontstyle_compare, null) };
Task.WaitAll(compareTasks); // wait for all 4 tasks to complete
// Appendresult();