これを行う唯一の方法は、複数のスレッドを使用するRPS * ConnectionTimeout
ことです。すべてのリクエストを待機する必要があり、非同期 IO を使用していない場合は、複数のスレッドを使用する可能性があります。
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 メカニズムを使用すると、限られた数のスレッドで多くの接続が可能になるため、より良い方法になります。
この記事は、スレッド化に関しても興味深いかもしれません