Вот ответ с Полли, но мне он не так нравится, как ответ без Полли или Полли с ожиданием, чтобы повторить попытку.
public static string RequestWithProxies(string url, string[] proxies)
{
var client = new WebClient { Credentials = new NetworkCredential(username, password) };
var result = String.Empty;
var proxyIndex = 0;
var policy = Policy.Handle<Exception>()
.Retry(
retryCount: proxies.Length,
onRetry: (exception, _) => proxyIndex++);
policy.Execute(() =>
{
if (proxyIndex >= proxies.Length) throw new Exception($"Exhausted proxies: {String.Join(", ", proxies)}");
client.Proxy = new WebProxy(proxies[proxyIndex]);
result = client.DownloadString(new Uri(url));
});
return result;
}