以下我想添加的查询:
Trace.WriteLine(i.Name)
然后计算任务而没有额外的枚举(没有单独的int count = tasks.Count()
)
var tasks = (
from i in items
where i.IsValid
orderby i.Priority
select i.GetTask())
.Take(100);
await TaskEx.WhenAll(tasks);
我知道如何通过后续/额外的枚举实现这一点,但我想知道如何在一个枚举中完成所有这些操作?这很重要,因为i.IsValid
操作实际上很昂贵,而且我只想调用一次才能进行过滤......
答案 0 :(得分:1)
鉴于你无论如何你只拿走了100件物品,我只是用ToList
强迫它进入一个清单:
var tasks = (from i in items
where i.IsValid
orderby i.Priority
select i.GetTask()).Take(100).ToList();
然后,您可以迭代它们以跟踪它们,轻松获取计数,并将列表传递给TaskEx.WhenAll
。