2012-10-17 22 views
1

我的理解是Task的要點是要抽象出線程,並且不保證每個Task都有一個新線程。在許多異步請求期間實際上有多少個同時(併發)連接被激活

我調試VS2010中,我有一些與此類似:

var request = WebRequest.Create(URL); 

Task.Factory.FromAsync<WebResponse>(
    request.BeginGetResponse, 
    request.EndGetResponse).ContinueWith( 
    t => { /* ... Stuff to do with response ... */ }); 

如果我讓X調用此,例如啓動X異步Web請求,我如何計算在執行期間的任何給定時間實際進行多少個同時(併發)連接?我認爲在某種程度上它是隻打開最多它可以(在X是非常高的情況下),以及其他Tasks都在等待封鎖?

任何深入瞭解這或如何,我可以使用調試器來確定多少激活(開放)連接在執行給定的點是存在的將是巨大的檢查。

基本上,我想知道,如果它是我處理的,或者如果我必須採取特殊的考慮,這樣我就不會出現被攻擊的服務器?

回答

1

這不是真的具體到Task。只要您撥打Task.Factory.FromAsync即可創建外部連接。 Task正在執行的「任務」僅僅是等待響應返回(不是首先發送它)。因此,如果你的機器是無法發送任何更多的請求調用BeginGetResponse會失敗,如果服務器拒絕你的要求,因爲它們相信,你正在涌入他們的響應將包含一個錯誤消息。

Task在這裏發揮作用的唯一真正的地方是機器實際接收到響應的時間與延續運行時間之間的時間。如果您得到很多答覆,或者在線程池中有大量工作,則可能需要一段時間才能繼續進行。

+0

OK,這樣服務器將與一些'500'或其他類似的錯誤代碼,如果它拒絕我的應用程序由於潛在的洪水響應。雖然,對於第一部分,我不確定如何確定我的機器能夠發送多少請求的上限。 – user17753

+0

@ user17753實際上,我懷疑你永遠達不到它,如果你這樣做,那麼這種方法可能會引發異常。如果你實際上提出了很多請求,那麼你可能做錯了什麼...... – Servy

+0

在我看來,這個限制默認爲2個併發連接到*相同的主機*。顯然,這可以在[app.config]中調整(http://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx) – user17753

相關問題