【发布时间】:2020-04-17 09:28:04
【问题描述】:
我有一个小项目,需要使用 C# 下载多个网站的 html 文档并使其尽可能快地执行。在我的场景中,我可能需要根据某些条件使用代理来切换 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;
}
这里的问题是我并没有真正利用发送多个网络请求,因为每个请求都必须完成才能开始下一个请求。有更好的方法吗?例如,一次发送 10 个 Web 请求,然后在其中一个请求完成时发送一个新请求。
谢谢
【问题讨论】:
-
您确定您的问题与 ASP.NET 相关吗?
标签: c# .net asynchronous async-await httpwebrequest