1

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

我怎样才能成功地并行化这些任务?

4

1 回答 1

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();
于 2013-05-27T06:06:05.077 回答