private async Task LoadSymbolsData() { try { var client = new HttpClient(); string url = ENDPOINT_URI + ENDPOINT_SYMBOLS_PRICES; var response = await client.GetAsync(url); if (!response.IsSuccessStatusCode) { Logger.Instance.LogMessage(TracingLevel.ERROR, $"Could not fetch Symbols Data! Status Code: {response.StatusCode} Message: {response.ReasonPhrase}"); return; } string body = await response.Content.ReadAsStringAsync(); JArray jarr = JArray.Parse(body); latestSymbols = jarr.ToObject <List <CryptoSymbolData> >(); lastRefresh = DateTime.Now; CryptoCurrencyUpdated?.Invoke(this, new CryptoCurrencyUpdatedEventArgs(latestSymbols)); } catch (Exception ex) { Logger.Instance.LogMessage(TracingLevel.ERROR, $"Error fetching Symbols Data: {ex}"); } }
public async void GetLatestSymbols() { await refreshLock.WaitAsync(); try { if (latestSymbols == null || (DateTime.Now - lastRefresh).TotalSeconds > 2 * REFRESH_SYMBOLS_SECONDS) { await LoadSymbolsData(); } else { CryptoCurrencyUpdated?.Invoke(this, new CryptoCurrencyUpdatedEventArgs(latestSymbols)); } } finally { refreshLock.Release(); } }