我使用了.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);
只需处理计时器我必须创建新线程等待!