Я написал следующую функцию для реализации функции тайм-аута с использованием функций асинхронного чтения NetworkStream
(BeginRead
и EndRead
). Работает нормально, пока я не закомментирую строку Trace.WriteLine("bytesRead: " + bytesRead);
. Почему?
private int SynchronousRead(byte[] buffer, int count)
{
int bytesRead = 0;
bool success = false;
IAsyncResult result = null;
result = _stream.BeginRead(
buffer, 0, count,
delegate(IAsyncResult r)
{
bytesRead = _stream.EndRead(r);
},
null);
success = result.AsyncWaitHandle.WaitOne(_ioTmeoutInMilliseconds, false);
if (!success)
{
throw new TimeoutException("Could not read in the specfied timeout.");
}
//If I remove this line, bytesRead is always 0
Trace.WriteLine("bytesRead: " + bytesRead);
return bytesRead;
}
На всякий случай, если вам интересно, я должен это сделать, потому что мне в конечном итоге потребуется нацелиться на .Net Compact Framework 3.5, и он не поддерживает свойства NetworkStream.ReadTimeout
и NetworkStream.WriteTimeout
.