public static async Task MinerStatsCheck() { await _semaphore.WaitAsync(); try { foreach (var m in _runningMiners.Values) { // skip if not running or if await already in progress if (!m.IsRunning || m.IsUpdatingApi) { continue; } var ad = m.GetSummaryAsync(); } // Update GUI ApplicationStateManager.RefreshRates(); // now we shoud have new global/total rate display it var kwhPriceInBtc = ExchangeRateApi.GetKwhPriceInBtc(); var profitInBTC = MiningStats.GetProfit(kwhPriceInBtc); ApplicationStateManager.DisplayTotalRate(profitInBTC); } catch (Exception e) { Logger.Error(Tag, $"Error occured while getting mining stats: {e.Message}"); } finally { _semaphore.Release(); } // TODO put this somewhere else maybe await RestartStagnatedMiners(); }