[英]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()
。
您可以使用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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.