示例#1
0
        /// <summary>
        /// Fetches the data for languages specified by <code>cultures</code> and merges / adds it to internally used dictionaries.
        /// </summary>
        /// <param name="cultures">A <see cref="IEnumerable{CultureInfo}" /> specifying the languages in which to fetch the data</param>
        /// <param name="clearExistingData">Value indicating whether the internally used dictionaries should be cleared before fetched data is added</param>
        /// <returns>A <see cref="Task" /> representing the async operation</returns>
        private async Task FetchAndMergeAll(IEnumerable <CultureInfo> cultures, bool clearExistingData)
        {
            Contract.Requires(cultures != null && cultures.Any());

            var cultureInfos = cultures as IReadOnlyList <CultureInfo> ?? cultures.ToList();

            Metric.Context("CACHE").Meter("SportDataCache->FetchAndMergeAll", Unit.Calls).Mark($"Getting for cultures='{string.Join(",", cultureInfos.Select(c => c.TwoLetterISOLanguageName))}'.");

            var fetchTasks = cultureInfos.Select(c => _dataRouterManager.GetAllSportsAsync(c)).ToList();

            fetchTasks.AddRange(cultureInfos.Select(c => _dataRouterManager.GetAllTournamentsForAllSportAsync(c)).ToList());
            fetchTasks.AddRange(cultureInfos.Select(c => _dataRouterManager.GetAllLotteriesAsync(c)).ToList());

            if (clearExistingData)
            {
                FetchedCultures.Clear();
                Categories.Clear();
                Sports.Clear();
            }

            await Task.WhenAll(fetchTasks).ConfigureAwait(false);

            foreach (var culture in cultureInfos)
            {
                FetchedCultures.Add(culture);
            }
        }