private bool TryGetCachedSynonym(string synonymCacheKey, RuntimeCacheAdapter cache, out Dictionary <String, HashSet <String> > synonymsCached)
        {
            synonymsCached = cache.Get <Dictionary <String, HashSet <String> > >(synonymCacheKey);
            if (synonymsCached == null)
            {
                return(false);
            }

            return(true);
        }
        public Dictionary <String, HashSet <String> > GetSynonyms(int synonymBatchSize, RuntimeCacheAdapter cache, StaticCachePolicy staticCachePolicy)
        {
            var    statisticLanguageTags = GetStatisticLanguageTags();
            string synonymCacheKey       = GetSynonymCacheKey(statisticLanguageTags);

            Dictionary <String, HashSet <String> > synonymsCached;

            if (TryGetCachedSynonym(synonymCacheKey, cache, out synonymsCached))
            {
                return(synonymsCached);
            }

            var loadedSynonyms    = LoadSynonymsFromSourceIndex(synonymBatchSize, statisticLanguageTags);
            var synonymDictionary = CreateSynonymDictionary(loadedSynonyms);

            cache.AddOrUpdate(synonymCacheKey, staticCachePolicy, synonymDictionary);
            return(synonymDictionary);
        }