.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サービス呼び出しにかなりの時間がかかると予想されている場合、呼び出しが戻る前にタスクが比較的早く完了するように見えます.