【问题标题】:How to Keep Stream Alive Just Long Enough如何让流保持足够长的时间
【发布时间】:2020-05-06 22:00:43
【问题描述】:

我有一个以下面显示的块结尾的函数。

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: 无法访问已关闭的 Stream。

解决此问题的最佳方法是什么?我是否应该不将 MemoryStream 包装在 using 块中?有没有办法让它保持打开足够长的时间以供阅读然后丢弃?

【问题讨论】:

标签: c# dispose using


【解决方案1】:

您的流由 using 语句包装。 using 语句将在退出方法后立即处理流。为了做你想做的事,你需要将处置责任传递给调用者。您需要将 using 语句放在调用方方法中。

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

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多