このように作成したタスクのリストがあります。
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>の候補ですか?