Мне нужно прочитать контент из Stream в C#. Я не знаю, что это за стрим. Давайте предположим, что это сетевой поток и сеть очень медленная. Поэтому я не могу сразу прочитать все байты. Я знаю, что 4 байта в потоке являются целыми числами, и это int определяет длину содержимого, которое нам нужно получить из потока. Как это сделать без занятого ожидания (зацикливания)?
private (int headerValue, bool isSuccess) ReadHeader()
{
var bytesRead = 0;
var headerBuffer = new byte[BufferHeaderLength];
var headerIsReady = false;
while (!headerIsReady)
{
try
{
var availableBytesToRead = Math.Min(BufferHeaderLength - bytesRead, underlyingStream.Length); // should be a number from 0 to 4
bytesRead += underlyingStream.Read(headerBuffer, bytesRead, (int)availableBytesToRead);
if (bytesRead == 0)
{
break;
}
}
catch (Exception)
{
break;
}
headerIsReady = bytesRead == BufferHeaderLength;
}
var headerValue = headerIsReady ? BitConverter.ToInt32(headerBuffer, 0) : 0;
return (headerValue, headerIsReady);
}