我使用.Net的Socket.BeginReceive方法,而我從EndReceive方法中獲取數據時,我使用AutoResetEvent.waitone塊EndReceive代碼線程無限地發現BeginReceive無法工作;所有線程都被阻塞;直到計時器結束,我什麼都沒有得到,併發出信號,我可以再次獲取數據。 BeginReceive不是一個異步方法?.net Sock.BeginReceive接收和阻止EndReceive
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);
僅僅配置計時器我必須創建新的線程等待!
你可以張貼相關的代碼嗎? BeginReceive是一個異步方法,它只會阻塞它創建的線程,而不是你的主應用程序線程。我會猜測你使用'AutoResetEvent'會導致這個問題。 – Sean
添加代碼到你的問題,有一個編輯鏈接正下方的標籤=] – Sean
我只是讓回調方法等待AutoResetEvent之後,我什麼都收不到,但當我設置AutoResetEvent我可以正常接收數據 – user2645410