我正在尋找使用Parallel.For
來調用需要一段時間才能返回的Web服務,但是,我們知道我們可以同時多次調用它,並且不會花費太多時間單一電話。從Parallel.For獲取結果
爲此,我嘗試了Parallel.For,我真的想檢查我的想法如何工作。我可能會有些過於謹慎,因爲我不想搞砸這個應用程序,我想確保如果我們走這條路線,整個應用程序團隊都會知道訪問並行代碼時需要做什麼。
無論如何,這裏是我目前的工作和理解。
public IEnumerable<HotelAvail> GetAvailability (IList<string> codes, DateTime startDate, int numNights)
{
HotelAvail[] result = new HotelAvail[codes.Count];
Parallel.For(0, codes.Count, i =>
{
string code = codes[i];
result[i] = new AvailService().
GetAvailability(
code, startDate, numNights);
});
return result;
}
的AvailService
得到房間給一個指定的日期範圍(startDate
+ numNights
)的可用性。 code
是屬性的標識符。
我在開始時設置了大量空槽的正確大小的結果數組。
然後我並行地調用服務。該服務會創建一個新的對象,並將其放置在陣列中正確的位置。
當一切完成後,我返回數組。它應該在這一點上被充分填充。應該沒有空白。該服務不會影響系統狀態的任何其他部分 - 它只是建立一個Web服務調用,調用它,並返回一個結果對象。
有沒有這個問題,我沒有看到。
就像我上面說過的,我可能過於謹慎了,但在更年輕和旺盛的日子裏我寫了多線程代碼,我不想再犯同樣的錯誤。
此外,這段代碼最終將在ASP.NET應用程序中結束。我隱約記得,它抱怨了很多關於多線程代碼。我可能在那裏遇到任何其他問題?
這部分是我想要使用的Parallel.For如果我必須做出10個服務電話的原因,每個大約需要4到7秒才能返回,然後是40到70秒來獲得這些數據。如果我可以平行打電話,結果是每次通話平均6-9秒,但我可以一次打5個電話,然後是12到18秒。顯着的節約。 – 2011-02-07 15:56:16