1

2 つの PDF のフォント ファミリーとフォント スタイルを比較する 4 つのタスクがあります。これらの 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 に答える