Чтение из потока C# без ожидания
Мне нужно прочитать контент из Stream на C#. Не знаю, какой это будет Stream. Предположим, это сетевой поток, а сеть очень медленная. Поэтому я не могу сразу прочитать все байты. Я знаю, что 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);
}