Como lidar com o tempo limite no soquete Async?

Eu tenho um código que usa soquete assíncrono para enviar mensagem ao cliente e espera resposta dele. Se o cliente não respondeu em um interno especificado, considerará o tempo limite. Alguns dos artigos da Internet sugerem o uso do WaitOne, mas isso bloqueia o encadeamento e adia o objetivo de usar a conclusão de E /

Qual é a melhor maneira de lidar com o tempo limite no soquete assíncron

 Sub OnSend(ByVal ar As IAsyncResult)
       Dim socket As Socket = CType(ar.AsyncState ,Socket)
       socket.EndSend(ar)

       socket.BeginReceive(Me.ReceiveBuffer, 0, Me.ReceiveBuffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnReceive), socket)

 End Sub

questionAnswers(1)

yourAnswerToTheQuestion