繁体   English   中英

WebClient在任务中计划时超时

[英]WebClient Timing out when Scheduled in Task

大家好,这是我第一次尝试在4.0中使用任务库,因此,如果您发现其他问题,除了我的问题不正确之外,请告诉我。

我的问题是,当我安排一堆在内部使用Web客户端发出请求的任务时,前几个任务可以顺利通过,但是一段时间后,我的Web客户端开始引发异常。 好像它创建了webclient一样,然后加入Task并等待线程将其拾取,但是到那时达到超时时间才是我的假设。

这是代码:

var TmsThread = Task.Factory.StartNew(()=> UpdateTmsNullPackages(),TaskCreationOptions.LongRunning);

在Windows应用程序的Form1_Load中运行。 这就是它所说的

public void UpdateTmsNullPackages()
    {
        Parallel.ForEach(TmsNullPackages, Package =>
        {
            try
            {
                Task<string> task = Task.Factory.StartNew(() => Package.GetPackageTmsId(), TaskCreationOptions.AttachedToParent);
                task.ContinueWith(t =>
                    {
                        if (!String.IsNullOrEmpty(t.Result))
                        {
                            Package.TMSID = t.Result;
                            NowTmsIdFoundPackages.Add(Package);
                        }
                    });
            }
            catch(Exception ex){}
        });
    }

依次运行

 public static string GetPackageTmsId(this TwcPackage Package)
    {
        string TMSID = null;
        if (!(String.IsNullOrEmpty(Package.movie_Provider)) && !(String.IsNullOrEmpty(Package.movie_Product)) && !(String.IsNullOrEmpty(Package.movie_Provider_ID)) && !(String.IsNullOrEmpty(Package.movie_Asset_ID)))
        {
            try
            {
                using (WebClient client = new WebClient())
                {
                    client.Credentials = new NetworkCredential(TMSID_Recheck.Properties.Settings.Default.WebRequestUser, TMSID_Recheck.Properties.Settings.Default.WebRequestProdUserPassWord);
                    XmlDocument xmlDoc = new XmlDocument();
                    string URLToBeRequested = TMSID_Recheck.Properties.Settings.Default.RequestProdBaseURL + TMSID_Recheck.Properties.Settings.Default.RequestAPIVersion + "/" + TMSID_Recheck.Properties.Settings.Default.RequestAPIProgramServiceCall + TMSID_Recheck.Properties.Settings.Default.RequestAPIProgramAssociationServiceCall + Package.movie_Provider + ':' + Package.movie_Product + ':' + Package.movie_Provider_ID + "::" + Package.movie_Asset_ID;
                    try
                    {
                        xmlDoc.LoadXml(client.DownloadString(URLToBeRequested));
                        XmlNodeList Program = xmlDoc.DocumentElement.SelectNodes("program");
                        if (Program.Count > 0) TMSID = Program[0].Attributes["TMSId"].Value.ToString();
                    }
                    catch (WebException ex)
                    {
                        if (ex.Status != WebExceptionStatus.Timeout)
                        {
                            if (((HttpWebResponse)ex.Response).StatusCode != HttpStatusCode.NotFound) {  }
                        }
                        else {  }
                    }
                }
            }
            catch (Exception ix) {  }
        }
        return TMSID;
    }

在数百个任务后调用downloadstring时,会引发超时异常,从而发生问题。

在执行数百个任务后调用downloadstring时会发生此问题

在那段时间内完成了多少任务?

看来您只是在排队太多请求。 您的系统和远程服务器可能已经制定了限制并发连接数的策略。

解决方案(和快速诊断测试)是在ForEach中使用MaxDegreeOfParallelism。

这是一个类似的问题,有一些好的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM