繁体   English   中英

并行化任务

[英]Parallelize tasks

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

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

您的问题很可能是在调用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM