예제 #1
0
        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());
        }