다음과 같이 만든 작업 목록이 있습니다.
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> 의 후보 입니까?