我正在尝试异步执行多个任务。然后等待所有内容,然后继续。 但是不知何故,我的所有任务都没有完成。查看我的示例代码。
//List from database
List<Promotion> promotions = _dbContext.promotions.ToList();
var promotionTasks = new List<Task>();
List<Promotion> outputPromotions = new List<Promotion>();
foreach (var promotion in promotions)
{
var task = Task.Run(() =>
{
var promotionStatus = GetPromotionStatus(promotion).Result;
var newPromotion = new Promotion
{
Id = promotion.Id,Name = promotion.Name,Code = promotion.Code,StatusId = promotionStatus
};
outputPromotions.Add(newPromotion);
});
promotionTasks.Add(task);
}
//await Task.WhenAll(promotionTasks);
Task.WaitAll(promotionTasks.ToArray());
//Output list
return outputPromotions;
例如
我在promotions
中得到了50个值(这是原始列表,它来自数据库)。然后在完成所有任务后,我没有始终如一地获得outputPromotions中的所有50个值。
outputPromotions
它给我的计数为49、48、50、46,而不是每次都为50。
我尝试了Task.WhenAll(promotionTasks);
和Task.WaitAll(promotionTasks.ToArray());
的等待,但结果相同。
有人可以暗示我在这里做错了吗?