【发布时间】:2018-12-24 12:25:53
【问题描述】:
假设我们有一个过滤器列表,是否可以使用 Parallel.ForEach 进行异步调用然后使用它们?我们必须等待所有呼叫结束吗?如果我们有 3 个异步调用而一个失败/超时怎么办?
var results = new ConcurrentBag<Service>();
Parallel.ForEach(filters, async filter =>
{
var result = await serviceClient.GetAllAsync(filter).ConfigureAwait(false);
results.AddRange(result);
});
MyMapper.Map(results);
MyMapper 有一个方法的地方:
Map(IEnumerable<Service> services) {
foreach(Service service in services) {
//do stuff
}
}
【问题讨论】:
-
您将拥有多少个过滤器?
-
你首先不需要
Parallel.ForEach。你想要await Task.WhenAll(filters.Select(filter => serviceClient.GetAllAsync(filter)))
标签: c# parallel-processing async-await parallel.foreach