c# - 并行下载网站网页
问题描述
我有以下代码,当我使用 逐个循环时它可以正常工作foreach
,但是当我将其更改为使用时,Parallel.ForEach
我遇到了错误。试图弄清楚我该如何纠正这个问题。仅供参考,dParms
列表包含唯一 ID。
我得到的错误是
写入路径时出错..... ErrorMessage:Item 已被添加。字典中的键:'IIS_WasUrlRewritten' 添加的键:'IIS_WasUrlRewritten',
private void GeneratePages(RequestStatus response, string localDir, List<Parameters> dParms, int total, DateTime generatedTime)
{
int current = 0;
Parallel.ForEach(dParms, curJob =>
{
try
{
DownloadPage(localDir, curJob, generatedTime);
}
catch (Exception ex)
{
response.Status = false;
response.Message = ex.Message;
}
finally
{
Interlocked.Increment(ref current);
if (current % 10 == 0)
//to do: Send Progress to UI
}
//});
}
private string DownloadPage(string localDir, Parameters p, DateTime generatedTime)
{
string strExtension = "html";
string url = string.Empty;
url = this.Url.Action("MyAction", "Home", new { area = "", @id = p.MyId, @generatedTime = generatedTime }, this.Request.Url.Scheme);
var document = new HtmlWeb().Load(url);
string strFileName = url.Substring(url.LastIndexOf("/") + 1);
strFileName = strFileName.Substring(0, strFileName.IndexOf("generatedTime") - 1);
string strDiskFileName = strFileName.Replace(".aspx?", "");
strDiskFileName = strDiskFileName.Replace("?", "");
strDiskFileName = strDiskFileName.Replace(".aspx", "");
strDiskFileName = strDiskFileName.Replace("&", "");
strDiskFileName = strDiskFileName.Replace("=", "");
strDiskFileName = strDiskFileName.Replace("%20", "");
strDiskFileName += "." + strExtension;
document.Save(localDir + strDiskFileName);
return url;
}
解决方案
推荐阅读
- assembly - SASM 调试器不在断点处停止
- google-workspace-add-ons - 大约一分半钟后,Gmail 通过 Workspace Add-On 请求提供过期的访问令牌
- javascript - 根据数组索引更新对象值
- python - 多正则表达式在python中获取数字
- android - 在 Flexboxlayout 中使用 wrapBefore
- javascript - JavaScript 中的活力是什么?
- python - Django,查询过滤器不适用于预取数据
- javascript - javascript dom 样式属性的函数
- reactjs - 在光滑的滑块内居中项目
- sql - 使用 SQL Oracle 中的 where 语句从列中复制奇怪的值