Как вернуть MemoryStream из функции?

У меня есть метод, который возвращает MemoryStream. Так получается, что когда я вызываю этот метод на Windows, то он работает корректно и возвращает данные, записанные в MemoryStream. Однако, если я вызываю этот метод на Linux, то метод возвращает пустой Stream. С чем это может быть связано? (Используется .NET Core)

public async Task<Stream> GetInfo()
{
    MemoryStream ms = new MemoryStream();

    bool bytesReceived = false;

    do
    {
        byte[] buffer = await storage.ReadAsync();

        await ms.WriteAsync(buffer, 0, buffer.Length);

        bytesReceived = buffer.Length != 0;
    }
    while(bytesReceived);

    ms.Seek(0, SeekOrigin.Begin);

    return ms;
}

Вот место откуда вызывается этот метод:

public async Task ReadData()
{
    var info = await GetInfo();

    var reader = new StreamReader(info);

    var dataString = reader.ReadToEnd();

    Console.WriteLine(dataString);
}

Вот метод ReadAsync:

public async Task<byte[]> ReadAsync()
{
    byte[] buffer = new byte[10];

    await activeStream.ReadAsync(buffer, 0, buffer.Length);

    return buffer;
}

Ответы (2 шт):

Автор решения: Aziz Umarov

Проблема кроется в другом месте. И связана она со storage. Это Linux там нужно следить за доступом, а MemoryStream проверяется легко.

Попробуйте так чтоб исключить вашу проблему.

public async Task<Stream> GetInfo()

{
    MemoryStream ms = new MemoryStream();

    bool bytesReceived = false;

    do
    {
        byte[] buffer = Encoding.ASCII.GetBytes("Hello world!!!!");

        await ms.WriteAsync(buffer, 0, buffer.Length);

        bytesReceived = buffer.Length != 0;
    }
    while(bytesReceived);

    ms.Seek(0, SeekOrigin.Begin);

    return ms;
}
→ Ссылка
Автор решения: ivan pupkin

Всем спасибо. Нашел решение для моего случая. Ситуация была такая, что метод висел на ожидании получения данных от метода ReadAsync. Поэтому как я думал в консоль ничего не выводилось. А на самом деле висело в цикле.

public async Task<Stream> GetInfo()
{
    MemoryStream ms = new MemoryStream(); 

    bool bytesReceived = false; 

    do 
    { 
        Task<byte[]> buffer = await storage.ReadAsync(); 

        await ms.WriteAsync(buffer.Result, 0, buffer.Result.Length); 

        bytesReceived = buffer.Result.Length != 0; 
    } 
    while(bytesReceived); 

    ms.Seek(0, SeekOrigin.Begin);

    return ms; 
}
→ Ссылка