首页 > 解决方案 > 并行下载网站网页

问题描述

我有以下代码,当我使用 逐个循环时它可以正常工作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;
    }

标签: c#asp.netasp.net-mvcparallel-processing

解决方案


推荐阅读