2014-01-24 97 views
1

我有一個文件集合,我需要並行處理它們。處理包括將每個文件上傳到FTP服務器作爲最後一步。該服務器上同時連接的數量是有限的,比方說,2。我用Parallel.Foreach()這樣的:Parallel.ForEach,限制同時連接

Parallel.ForEach(files, options, ProcessFile); 

難道我保證通過傳遞到Parallel.ForEach

ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 2 }; 

,我不會超過允許的連接數量?我已閱讀了很多關於如何運作,但我仍然不確定。我認爲我是FTP服務器的唯一用戶,並且在ProcessFile期間每個連接都正確關閉。

+0

連接限制:是* total *連接嗎?還是「每個調用節點」連接?如果前者,你需要非常確定它沒有在其他地方運行。在後者中,您仍然需要知道這個*操作*是否可以在應用程序中一次執行兩次。 –

+0

@MarcGravell Total。每次呼叫都會打開一個新連接,並在文件上傳後關閉它。 –

+0

我的觀點(「總計」)是:你知道你的應用程序只運行在一個節點上嗎? –

回答

2

是的,這將確保您最多隻能同時運行兩個任務。假設沒有其他進程或任務正在執行任何上傳到該服務器,你應該沒問題。

我建議在你的foreach循環中使用一個信號量,因爲那樣實際的處理可以同時完成兩個以上的任務。如果處理是需要大部分時間的部分,這會提高性能。

+0

我正是這樣做。處理的所有步驟都是並行運行的,但是在上傳時使用信號量。 –