要做到這一點,唯一的方法是使用多個線程 - 如果所有請求都必須等待,並且您沒有使用異步IO,則可能使用多個線程 - 可能高達RPS * ConnectionTimeout
。
你可以作弊和使用ThreadPool(但請注意,它不作任何保證:調度)。如果你使用.Net 4,還有Task Parallel Library。
對於〜20 RPS,我懷疑ThreadPool精度的缺乏會成爲一個問題。隨着你獲得更高的RPS,這將會改變。
如果您想DIY,請注意很難做到正確。一個簡單的實現是有一個主要工作線程啓動新的線程爲每個連接...
Private ShutdownRequested As Boolean = False
Public Sub StartLoad(RPS As Integer)
ShutdownRequested = False
Dim MainThread As New Threading.Thread(Sub() Worker(RPS))
MainThread.Start()
End Sub
Public Sub StopLoad()
ShutdownRequested = True
End Sub
Private Sub Worker(RPS As Integer)
While Not ShutdownRequested
Threading.Thread.Sleep(CInt(1/RPS * 1000))
Dim Worker As New Threading.Thread(Sub() OpenAConntection())
End While
End Sub
一個更好的辦法是使用異步IO機制described here,因爲它允許用數量有限的連接數線程。
This article也可能有興趣重新:線程