private async Task RevalidateProxy() { var client = new WebClient(); _logger.Trace($"{GetType().Name}: Запущена проверка работоспособности прокси-сервера..."); // Проверяем работоспособность текущего прокси-сервера. var settings = _cashlogSettingsService.ReadSettings(); var currentProxy = string.IsNullOrEmpty(settings.ProxyAddress) ? null : new WebProxy(settings.ProxyAddress); if (IsProxyWorks(currentProxy, client)) { _logger.Trace($"{GetType().Name}: Текущий прокси-сервер работает!"); SetNewProxy(currentProxy, _lastWorkingWebProxy); return; } _logger.Trace($"{GetType().Name}: Текущий прокси-сервер больше не работает!"); // Иначе, проверяем закешированные прокси сервера. _logger.Trace($"{GetType().Name}: Проверяем закешированные прокси-сервера. Количество серверов: {_cachedProxies.Count}"); var workingCachedProxy = GetWorksProxies(_cachedProxies, client).FirstOrDefault(); if (workingCachedProxy != null) { SetNewProxy(workingCachedProxy, currentProxy); return; } // Среди закешированных нету работающего. Получаем прокси сервера от провайдера. _logger.Trace($"{GetType().Name}: Получаем прокси-сервера от провайдера..."); var proxies = await _proxyProvider.GetProxiesAsync(); if (proxies == null || proxies.Count == 0) { _logger.Warning($"{GetType().Name}: От провадйера не было получено ни одного прокси-сервера"); SetNewProxy(null, currentProxy); return; } _logger.Trace($"{GetType().Name}: От провадйера было получено {proxies.Count} прокси-серверов"); // Проверяем прокси, полученные от провайдера. var newProxies = new Queue <WebProxy>(proxies); var workingProxy = GetWorksProxies(newProxies, client).FirstOrDefault(); SetNewProxy(workingProxy, currentProxy); _cachedProxies = newProxies; }