私の C# アプリケーションには、停止するように指示されるまで、基本的に TcpClient から継続的に読み取るスレッドがあります。この目的で WaitHandles を使用します。たとえば、次のようにします。
プライベート ManualResetEvent 停止; プライベートボイド受信() { while (!this.stopping.WaitOne(10)) { while (this.client.Available > 0) { // データを読み込んで処理する } } }
ご覧のとおり、スレッドが停止するように指示されるのを待っています。そうでない場合は、TcpClient からすべてのデータを読み取り、ループします。
私が抱えている問題は、10ms の遅延です。私はそれを減らすことができましたが、スレッドが停止するように指示されるか、より多くのデータが利用可能になるまで、プログラムが一時停止するソリューションを好みます。
実際、私が欲しいのは、TcpClient でデータが利用可能になるタイミングを教えてくれる WaitHandle です。そうすれば、WaitHandle.WaitAny を使用できます。これを行う方法はありますか、または誰かが別のアプローチを提案できますか?
これは、かなり高性能で軽量なバックグラウンド プロセスである必要があるため、面倒ではありません。