任务-等待所有任务仅返回上次执行的任务

时间:2019-05-04 00:58:00

标签: c# async-await task wait

我在执行任务时遇到了问题。我创建了一个任务列表,该任务返回一个项目列表。但是在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个任务。

但是当我对结果进行迭代时,任务将具有最后执行的任务的结果。

我希望任务有不同的结果。

有人可以帮我解决我的问题吗?

0 个答案:

没有答案