并行化任务

时间:2013-05-27 05:44:55

标签: c# visual-studio-2010

我有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();
}

如何成功并行化这些任务?

1 个答案:

答案 0 :(得分:3)

您的问题很可能是在调用Appendresult()之前需要等待任务完成;但是,ThreadPool.QueueUserWorkItem将任务排队但不等待它完成,因此您过早地调用Appendresult()

您可以使用TPLTask.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();