我正在尝试使用 .NET 4.0 任务并行库,但在任务等待方面遇到了一些问题。基本上,我想遍历一个列表,并创建一个任务来为每个项目调用一个 web 服务方法,并行执行它们,然后等待所有任务完成。
我已经尝试过 WaitAll 以及 Wait for all tasks one-by-one 模式,但似乎都不起作用。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
我发现所有任务都排队等候,然后我期望等待 Web 服务调用需要相当长的时间,在调用返回之前,这些任务似乎相对较快地完成。