【问题标题】:How to override stream closing when returning stream C#返回流C#时如何覆盖流关闭
【发布时间】:2022-01-14 16:50:06
【问题描述】:

我希望能够从我的函数中返回 MemoryStream,但我认为在返回 stream 时它也会自动关闭

using (var httpStream = await httpClient.GetStreamAsync(link)) 
{
    using (var stream = new MemoryStream()) 
    {
        await httpStream.CopyToAsync(stream); 
        return stream;    
    }
}

有什么办法可以让override 这个我可以返回stream 以便我可以在其他地方使用它。

这是我尝试在另一种方法中使用它的方式:

using (var fielStream = new FileStream(path, FileMode.Create))
{
    Stream stream = await GetStreamAsync(videoid, type, quality);

    await stream.CopyToAsync(fileStream);  
}

【问题讨论】:

  • 我建议您仔细阅读 SO Tour 部分,因为它展示了 SO 的工作原理。我如何问一个好问题?可能会有所帮助。此外,您可能会发现 SO Asking 部分很有用。 stackoverflow.com/tour
  • 删除using:应该是调用者Dispose
  • 请勿发布代码图片

标签: c# .net stream return memorystream


【解决方案1】:

删除内部using:它是调用者(调用创建者)应该Dispose 流:

using (var httpStream = await httpClient.GetStreamAsync(link)) {
  var stream = new MemoryStream();

  try {
    await httpStream.CopyToAsync(stream); 

    return stream;    
  }
  catch {
    stream.Dispose();

    throw;
  } 
}

调用者应该输入using,像这样:

// We create MemoryStream with the code above (GetStreamAsync) 
/ and then Dispose the stream 
using (var stream = await GetStreamAsync(...)) {
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多