I\'m using a NetworkStream & TcpClient to asynchronously receive data using BeginRead. I need to apply a time-out to this operation, such that after a specified amount o
Wait on ManualResetEvent with some timeout value to signal when your task is finished. If it times out before it is signaled, then you know that asynchronous operation never completed.
private ManualResetEvent receiveDone = new ManualResetEvent(false);
receiveDone.Reset();
socket.BeginReceive(...);
if(!receiveDone.WaitOne(new TimeSpan(0, 0, 0, 30))) //wait for 30 sec.
throw new SocketException((int)SocketError.TimedOut);
Inside BeginReceive callback, use
private void ReceiveCallBack(IAsyncResult ar)
{
/** Use ar to check if receive is correct and complete */
receiveDone.Set();
}