public async static Task HttpGet(String url, TimeSpan timeout, ProxyPool proxyPool, Action<HttpHelper.HttpResult> handleCallback) { // запрашиваем пока не выполнится удачно или упадет while (true) { using (var proxy = new Proxy(proxyPool)) { try { proxy.LockAvaliableProxy(); var result = await HttpHelper.HttpGetWithCode(url, new HttpHelper.HttpParams() { Proxy = proxy.Address, Decode = true, Timeout = timeout }); handleCallback(result); proxy.IsOk = true; return; } catch (NoAvaliableProxiesException) { // выбрасываем наверх, что прокси закончились throw; } catch (Exception) { proxy.IsOk = false; } } } }
public Proxy(ProxyPool proxyPool) { _proxyPool = proxyPool; IsOk = false; }
void FillProxy(String proxyFilePath) { var proxies = FileHelper.GetStringsFromFile(proxyFilePath); proxyPool = new ProxyPool(proxies, new TimeSpan(0, 0, 0, 0, Settings.Default.BenzinRequestDelay)); Logger.Instance.Info(String.Format("Загружено {0} прокси из файла {1}", proxies.Count, proxyFilePath)); }