我有一个程序循环遍历应用程序列表。现在使用多个http请求响应
Apps
--------
App1
App2
App3
,为他们每个人,我做一个HTTP请求得到建立的每个应用程序作为XML的列表。
所以请求一样,
http://example.com/getapplist.do?appid=App1
给我的回应一样,
<appid name="App1">
<buildid BldName="Bld3" Status="Not Ready"></buildid>
<buildid BldName="Bld2" Status="Ready"></buildid>
<buildid BldName="Bld1" Status="Ready"></buildid>
</appid>
现在我得到最高版本号与状态 “就绪”,然后做另一个Web api call like,
http://example.com/getapplist.do?appid=App1&bldid=Bld2
这给了我一个回应,
<buildinfo appid="App1" buildid="Bld2" value="someinfo"></build>
我把它们送入内部数据表。但是现在,这个程序需要花费很长时间才能完成(3个小时),因为我有近2000个appids,每个id有2个Web请求。我尝试使用指定here的BackgroundWorker对此问题进行分类。我想将所有来自http响应的信息整理成单个XML,然后使用该XML进行进一步处理。这引发错误,
文件正被另一个进程
所以我的代码看起来像,
if (!backgroundWorker1.IsBusy)
{
for(int i = 0; i < appList.Count; i++)
{
BackgroundWorker bgw = new BackgroundWorker();
bgw.WorkerReportsProgress = true;
bgw.WorkerSupportsCancellation = true;
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
//Start The Worker
bgw.RunWorkerAsync();
}
}
而且DoWork
功能选取的变量值,并将其转换为XML 。
我可以通过所有后台工作人员的所有http响应将app- buildinfo详细信息转换为普通文件的最佳方式是什么?
这会产生2000 backgroundworkers ......不好......而不是打电话给你的WebAPI异步从一个BackgroundWorker的...并使用锁的WebRequest完成的事件火灾和写入xml文件异步的时候之一。 – rene 2014-08-30 10:48:03
你能否加上你的'DoWork'方法代码? – 2014-08-30 11:07:38
@rene,那么我有什么限制?另外,如果我设置了5个背景工作者的限制,那么这是否意味着线程将并行运行,直到所有2K网址都可以工作? – mhn 2014-08-30 11:11:05