私は.NetのSocket.BeginReceiveメソッドを使用しましたが、EndReceiveメソッドからデータを取得している間、AutoResetEvent.waitoneブロックを使用してEndReceiveコードスレッドを無限に使用しましたBeginReceiveが機能しないことがわかりました。すべてのスレッドがブロックされました。タイマーが終了し、データを再び取得できるイベントを通知するまで、何も取得しません。BeginReceive は非同期メソッドではありませんか?
var sock= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.BeginReceive(buffer, 0, 1024, SocketFlags.None, i => {
var sock= (Socket)i.AsyncState;
int readNum=sock.EndReceive(i);
var reset= new AutoResetEvent(false);
Timer timer = new Timer({ Thread.Sleep(1000000000); reset.set() });
reset.WaitOne(Timeout.Infinite);
time.Dispose();
} ,sock);
タイマーを破棄するだけで、待機する新しいスレッドを作成する必要があります!!