public async Task <IReadOnlyCollection <WeatherForecastResponse> > Execute(IReadOnlyList <string> locations) { var semaphoreSlim = new SemaphoreSlim( ThrottlerBenchmark.MaxConcurrency, ThrottlerBenchmark.MaxConcurrency); var responses = new ConcurrentBag <IReadOnlyCollection <WeatherForecastResponse> >(); var tasks = locations.Select(async location => { await semaphoreSlim.WaitAsync(); try { var response = await _dummyApiHttpClient.GetWeatherForecast(location); responses.Add(response); } finally { semaphoreSlim.Release(); } }); await Task.WhenAll(tasks); return(responses.SelectMany(x => x).ToArray()); }
public async Task <IReadOnlyCollection <WeatherForecastResponse> > Execute(IReadOnlyList <string> locations) { var responses = new ConcurrentBag <IReadOnlyCollection <WeatherForecastResponse> >(); var tasks = locations.Select(async location => { var response = await _dummyApiHttpClient.GetWeatherForecast(location); responses.Add(response); }); await Task.WhenAll(tasks); return(responses.SelectMany(x => x).ToArray()); }
public async Task <IReadOnlyCollection <WeatherForecastResponse> > Execute(IReadOnlyList <string> locations) { var responses = new List <IReadOnlyCollection <WeatherForecastResponse> >(locations.Count); for (var i = 0; i < locations.Count; i++) { var result = await _dummyApiHttpClient.GetWeatherForecast(locations[i]); responses.Add(result); } return(responses.SelectMany(x => x).ToArray()); }