我在执行任务时遇到了问题。我创建了一个任务列表,该任务返回一个项目列表。但是在waitall之后,当我迭代任务列表以检查结果时,所有结果都是最后一次执行。
我尝试了一些带有整数和字符串的基本示例,在这些情况下,它们对我来说工作得很好。但是我并没有意识到自己在逻辑上做错了什么。
List<Item> results = new List<Item>();
List<string> mappedIds = GetIds();
List<Task<IEnumerable<Item>>> tasks = new List<Task<IEnumerable<Item>>>();
foreach (var id in mappedIds)
{
var searchelement = new SearchCriteria();
searchelement.id= id ;
Task<IEnumerable<Item>> itemTask= null;
itemTask= new Task<IEnumerable<Policy>>(() => {
return getElements(searchelement);
});
tasks.Add(itemTask);
itemTask.Start();
}
Task.WaitAll(tasks.ToArray());
foreach (Task<IEnumerable<Item>> item in tasks)
{
if (item.Result != null)
{
results.AddRange(item.Result);
}
}
return results;
所以我的实际问题是,可以说我在mapdIds上有2个项目。我将获得2个任务。
但是当我对结果进行迭代时,任务将具有最后执行的任务的结果。
我希望任务有不同的结果。
有人可以帮我解决我的问题吗?