Как сохранить поток живым достаточно долго - PullRequest
2 голосов
/ 07 мая 2020

У меня есть функция, которая заканчивается блоком, показанным ниже.

using (var stream = new MemoryStream(someBytes))
{
    var result = new HttpResponseMessage { Content = new StreamContent(stream) };
    return result;
}

Однако в другом файле этот результат используется в такой строке:

var justSomeString = returnedResultFromAbove.Content.ReadAsStringAsync().Result;

Это вызывает следующую ошибку:

System. Net .Http.HttpRequestException: Ошибка при копировании содержимого в поток. ---> System.ObjectDisposedException: невозможно получить доступ к закрытому потоку.

Как лучше всего обойти эту проблему? Должен ли я просто не заключать свой MemoryStream в блок using? Есть ли способ держать его открытым достаточно долго, чтобы его прочитали, а затем удалили?

1 Ответ

1 голос
/ 07 мая 2020

Ваш поток заключен в оболочку с помощью оператора using. Оператор using удаляет поток сразу после выхода из метода. Чтобы делать то, что вы хотите, вам необходимо передать ответственность за удаление вызывающей стороне. Вам нужно поместить оператор using в метод вызывающего объекта.

using(var stream = GetMyStream())
{
   // do some work
}
...