Чтение из потока 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);
}

0 ответов

Другие вопросы по тегам