private async Task <List <MarketSummary> > GetExtendedMarketSummaries(string quoteCurrency) { var summaries = new List <MarketSummary>(); var symbolsCacheKey = this._exchange + "Markets"; var symbols = await Global.AppCache.GetAsync <IEnumerable <ExchangeMarket> >(symbolsCacheKey); if (symbols == null || !symbols.Any()) { symbols = await _api.GetSymbolsMetadataAsync(); Global.AppCache.Add(symbolsCacheKey, symbols, new MemoryCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1), }); } if (symbols.Count() == 0) { throw new Exception(); } var list = await _api.GetSymbolsAsync(); var filteredList = list.Where(x => x.ToLower().EndsWith(quoteCurrency.ToLower(), StringComparison.Ordinal)); //var tasks = new Task[summaries.Count()]; //var cts = new CancellationTokenSource(); //var po = new ParallelOptions //{ // CancellationToken = cts.Token, // MaxDegreeOfParallelism = Environment.ProcessorCount //}; //Parallel.ForEach(filteredList, po, (item, state, index) => //{ // tasks[(int)index] = Task.Run(() => // { // var ticker = _api.GetTickerAsync(item).Result; // if (ticker != null) // { // var symbol = symbols.FirstOrDefault(x => x.MarketName == item); // if (symbol != null) // { // summaries.Add(new MarketSummary() // { // CurrencyPair = new CurrencyPair() { BaseCurrency = symbol.MarketCurrency, QuoteCurrency = symbol.BaseCurrency }, // MarketName = item, // Ask = ticker.Ask, // Bid = ticker.Bid, // Last = ticker.Last, // Volume = ticker.Volume.ConvertedVolume, // }); // } // } // }); //}); //Task.WaitAll(tasks); foreach (var item in filteredList) { var ticker = await _api.GetTickerAsync(item); if (ticker != null) { var symbol = symbols.FirstOrDefault(x => x.MarketName == item); if (symbol != null) { summaries.Add(new MarketSummary() { CurrencyPair = new CurrencyPair() { BaseCurrency = symbol.MarketCurrency, QuoteCurrency = symbol.BaseCurrency }, MarketName = item, Ask = ticker.Ask, Bid = ticker.Bid, Last = ticker.Last, Volume = ticker.Volume.ConvertedVolume, }); } } } return(summaries); }