1

ソフトウェア開発には C#、.Net Framework 3.5 を使用しています。私のアプリケーションは、TCP/IP を介して一度に複数のクライアントに接続し、それらからいくつかのデータを収集します。クライアント数が非常に多い ( 100 以上)。アプリケーション開発プロセスの前に、いくつかの調査を行ったところ、パフォーマンスと管理性の面で非同期ソケットの実装を使用する必要があることがわかりました。

今のところ問題ないようですが、現在、データをクライアントに送信する直前に遅延を設定する最良の方法を探しています。私のアプリケーションは、特定のデータを送信するために約 2 秒待つ必要がある場合があります。System.Threading.Thread.Sleep(2000);とりあえず、非同期送信メソッドの前にコード行を入れただけです。これは便利な方法ですか、それとももっと良い方法はありますか? このSleep関数はアプリケーションのメイン スレッドをブロックしますか、それとも非同期ソケットが属するスレッドのみをブロックしますか。

4

1 に答える 1

1

代わりに匿名メソッドでタイマーを使用します.Thread.Sleepは(ほとんどの場合)悪です...

System.Threading.Timer timer;
timer = new Timer((cs) =>
    {
        ...asynchronous send here
        timer.Dispose();
    }, null, 2000, Timeout.Inifinite);

これは、括弧内のコードが 2000 ミリ秒後に 1 回実行されることを意味します。

timer.Dispose()行は非常に重要です。使用できる未処理のタイマーの数には制限があります。

于 2012-10-09T05:52:01.893 に答える