我有一個程序循環遍歷應用程序列表。現在使用多個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