如何保持流的生命力足够长

问题描述 投票:2回答:1

我有一个函数,它的结尾是下面所示的块。

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.System.Http.HttpRequestException: Error while copying content to a Stream: 无法访问一个封闭的Stream。

解决这个问题的最好方法是什么?我是否应该不把我的MemoryStream包在使用块中?有没有一种方法可以让它保持足够长的打开时间,以便被读取,然后被处理?

c# dispose using
1个回答
1
投票

你的流是由using语句包装的。当退出方法时,using语句将立即处理流。为了达到你的目的,你需要将处置责任传递给调用者。你需要把using语句放在调用者方法中。

using(var stream = GetMyStream())
{
   // do some work
}
© www.soinside.com 2019 - 2024. All rights reserved.