0

.NET 4.0 Task Parallel ライブラリを使用しようとしていますが、Task Wait で問題が発生しています。基本的に、リストを反復処理し、各項目の Web サービス メソッドを呼び出す Task を作成し、それらを並行して実行してから、すべての Task が完了するのを待ちます。

WaitAll とすべてのタスクを 1 つずつ待機するパターンを試しましたが、どちらも機能していないようです。Web サービスはすべて並行してトリガーされる可能性がありますが、Web サービスの応答を待機していないように見えるため、タスクは待機をスキップして完了します。

私がここに欠けているものはありますか?

foreach (Item currentItem in ItemList)
{

 // create task for webservice call.
 Task<Item> itemTask = Task.Factory.StartNew(() =>
        {
          Item result = Utilities.UpdateItem(currentItem);
          return result;

        });

        // add to the task list.
        taskList.Add(itemTask);

}

// create task array
Task[] taskArray = taskList.ToArray();
//wait for tasks to complete
Task.WaitAll(taskArray);

WaitAllの代わりに、次のことも試しました

// wait for all tasks, one-by-one pattern
while (taskList.Count > 0)
{
    Task<Item>[] tasks = taskList.ToArray();
    int index = Task.WaitAny(tasks);

    var result = tasks[index].Result;

    taskList.RemoveAt(index);
}

静的メソッドへの呼び出しは、基本的に、オブジェクトUtilities.UpdateItemを変更して返す一連の Web サービス呼び出しに基づいて結果を構築します。Item私が見つけたのは、すべてのタスクがキューに入れられていることです.WaitがWebサービス呼び出しにかなりの時間がかかると予想されている場合、呼び出しが戻る前にタスクが比較的早く完了するように見えます.

4

1 に答える 1