У меня есть мини-проект, требующий загрузки html документов с нескольких веб-сайтов с использованием C# и заставить его работать как можно быстрее. В моем сценарии мне может потребоваться переключить IP с помощью прокси на основе определенных условий. Я хочу воспользоваться C# Asynchronous Tasks, чтобы он выполнял как можно больше запросов, чтобы весь процесс был быстрым и эффективным.
Вот код, который у меня есть.
public class HTMLDownloader
{
public static List<string> URL_LIST = new List<string>();
public static List<string> HTML_DOCUMENTS = new List<string>();
public static void Main()
{
for (var i = 0; i < URL_LIST.Count; i++)
{
var html = Task.Run(() => Run(URL_LIST[i]));
HTML_DOCUMENTS.Add(html.Result);
}
}
public static async Task<string> Run(string url)
{
var client = new WebClient();
//Handle Proxy Credentials client.Proxy= new WebProxy();
string html = "";
try
{
html = await client.DownloadStringTaskAsync(new Uri(url));
//if(condition ==true)
//{
// return html;
//}
//else
//{
// Switch IP and try again
//}
}
catch (Exception e)
{
}
return html;
}
Проблема здесь в том, что я не пользуюсь преимуществом отправки нескольких веб-запросов, потому что каждый запрос должен заканчиваться sh для начала следующего. Есть ли лучший подход к этому? Например, отправляйте 10 веб-запросов одновременно, а затем отправляйте новый запрос, когда один из этих запросов будет завершен.
Спасибо