【发布时间】:2019-12-22 11:00:15
【问题描述】:
我有一个活动列表,我想获取每个活动的表演。现在我想拥有最多 10 个并行运行的“代理”,而不是更多。
这就是代码的样子,除了我想确保这些代码不是all并行运行。 allEvents 中可能有 1000 个元素。我想将其限制为最多并行 10 个。
public async Task RefreshAll(Event[] allEvents)
{
var allPerformances = (await Task.WhenAll(allEvents.Select(CollectPerformancesForEvent))).SelectMany(x => x);
// persist allPerformances
}
private async Task<Performance[]> CollectPerformancesForEvent(Event @event)
{
// some API call collecting all performances for @event...
await Task.Delay(500);
return new[]{ new Performance() };
}
【问题讨论】:
-
我已经尝试过另一个问题中描述的解决方案,它们在这里并不适用。这个问题要求延迟任务的创建,直到它们可以实际完成。
标签: c# .net parallel-processing async-await