[英]Parallel.ForEach, Task.Factory and N threads
我知道之前已經有人問過這個問題,但我仍然不知道在這種情況下該使用什么。
我需要針對一個我知道一次可以處理16個請求的Web服務進行100次調用(不是,如果獲得更多請求,它將失敗)
我認為Parallel.ForEach適用於更底層的CPU密集型調用-它將決定最適合多少線程。 Task.Factory使用線程池,因此線程數可能少於16(更多)
當然,我可以編寫自己的線程池,但是在這種情況下沒有更明顯的選擇嗎?
我會用Parallel.ForEach
但指定ParallelOptions
與MaxDegreeOfParallelism
設置為16,你給你想要的並行度的非常明確地表明這種方式。
如果您使用Task.Factory
我認為可以假設您將獲得16個以上的並發任務,盡管如果您使用異步IO,則無論如何都不需要16個並發線程 。
您可能想看一下TPL數據流 -我沒有專門研究如何輕松划分使用者,但是由於它直接針對生產者/消費者方案,因此如果您無法創建16個使用者,我會感到驚訝。只需撥打100個電話。
或者,當然,您可以創建全部使用相同BlockingCollection
16個線程,其中包含100個調用的數據。 這樣可以保證並行度。
請注意,為了實際在同一時間對同一HTTP主機同時進行16個調用,您可能需要調整app.config的<connectionManagement>
部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.