【发布时间】:2012-11-22 14:32:19
【问题描述】:
我真的希望有人对 TPL 和 System.Net 类和方法都有足够的经验
最初只是想在当前的一系列操作上使用TPL,这导致我的项目停止了。
由于我对 .NET 还很陌生,所以使用 TPL 直接跳到深水区……
我试图使用 WebClient 提取 Aspx 页面的源/内容(html)
每天有多个请求(大约 20-30 页要通过)并从源代码中提取特定值......这只是服务器在其列表中的少数日常任务之一,
引导我尝试使用 TPL 来实现它,从而获得一些速度。
虽然我尝试使用 Task.Factory.StartNew() 尝试迭代几个 WC 实例,
第一次尝试执行 WC 时,应用程序没有从 WebClient 获得任何结果
这是我最后一次尝试
static void Main(string[] args)
{
EnumForEach<Act>(Execute);
Task.WaitAll();
}
public static void EnumForEach<Mode>(Action<Mode> Exec)
{
foreach (Mode mode in Enum.GetValues(typeof(Mode)))
{
Mode Curr = mode;
Task.Factory.StartNew(() => Exec(Curr) );
}
}
string ResultsDirectory = Environment.CurrentDirectory,
URL = "",
TempSourceDocExcracted ="",
ResultFile="";
enum Act
{
dolar, ValidateTimeOut
}
void Execute(Act Exc)
{
switch (Exc)
{
case Act.dolar:
URL = "http://www.AnyDomainHere.Com";
ResultFile =ResultsDirectory + "\\TempHtm.htm";
TempSourceDocExcracted = IeNgn.AgilityPacDocExtraction(URL).GetElementbyId("Dv_Main").InnerHtml;
File.WriteAllText(ResultFile, TempSourceDocExcracted);
break;
case Act.ValidateTimeOut:
URL = "http://www.AnotherDomainHere.Com";
ResultFile += "\\TempHtm.htm";
TempSourceDocExcracted = IeNgn.AgilityPacDocExtraction(URL).GetElementbyId("Dv_Main").InnerHtml;
File.WriteAllText(ResultFile, TempSourceDocExcracted);
break;
}
//usage of HtmlAgilityPack to extract Values of elements by their attributes/properties
public HtmlAgilityPack.HtmlDocument AgilityPacDocExtraction(string URL)
{
using (WC = new WebClient())
{
WC.Proxy = null;
WC.Encoding = Encoding.GetEncoding("UTF-8");
tmpExtractedPageValue = WC.DownloadString(URL);
retAglPacHtmDoc.LoadHtml(tmpExtractedPageValue);
return retAglPacHtmDoc;
}
}
我做错了什么?是否可以使用 TPL 使用 WebClient 或者我应该使用其他工具(无法使用 IIS 7 / .net4.5)?
【问题讨论】:
标签: c# .net-4.0 task-parallel-library system.net