public async Task <CurrenciesServiceResponse> GetCurrenciesAsync(CancellationToken cancellationToken) { List <object> cacheKeyList = new List <object>(); cacheKeyList.Add("GetCurrenciesAsync"); string cacheKey = string.Join(":", cacheKeyList); CurrenciesServiceResponse data = (CurrenciesServiceResponse)cache.Get(cacheKey); if (data == null) { await Settings.CurrenciesServiceLock.WaitAsync(); try { data = (CurrenciesServiceResponse)cache.Get(cacheKey); if (data == null) { string responseString = ""; if (_dataPath != "" && File.Exists(_dataPath + Settings.CurrenciesServiceFileName)) { var path = _dataPath + Settings.CurrenciesServiceFileName; responseString = File.ReadAllText(path); } else { var variables = new Dictionary <string, string>(); variables.Add("{apiKey}", ApiKey()); var URL = Settings.CurrenciesServiceURL.ReplaceFromDictionary(variables); var response = await WebRequestHelper.GetAsync(URL, WebRequestHelper.ResponseAcceptType.JSON, cancellationToken); responseString = response.Item1.BytesToString(); try { if (_dataPath != "") { File.WriteAllText(_dataPath + Settings.CurrenciesServiceFileName, responseString); } } catch { } } data = JsonConvert.DeserializeObject <CurrenciesServiceResponse>(responseString); cacheCurrencies(data, cancellationToken); } } finally { Settings.CurrenciesServiceLock.Release(); } } return(data); }
private void cacheCurrencies(CurrenciesServiceResponse data, CancellationToken cancellationToken) { List <object> cacheKeyList = new List <object>(); cacheKeyList.Add("GetCurrenciesAsync"); string cacheKey = string.Join(":", cacheKeyList); CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(Settings.CurrenciesServiceCacheExpiration)); cache.Add(cacheKey, data, policy); foreach (Currency currency in data.Currencies) { cache.Add("currency:" + currency.Code, currency, policy); } }