我有一个这样创建的任务列表:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
通过使用.ToList()
,任务应该全部开始。现在,我要等待其完成并返回结果。
这在上面的...
块中有效:
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
它可以满足我的要求,但是看起来很笨拙。我宁愿这样写一些简单的东西:
return tasks.Select(async task => await task).ToList();
...但是不能编译。我想念什么?还是不可能以此方式表达事物?
DoSomethingAsync(foo)
为每个foo顺序处理,或者这是Parallel.ForEach <Foo>的候选对象?