返回流C#时如何覆盖流关闭
Posted
技术标签:
【中文标题】返回流C#时如何覆盖流关闭【英文标题】:How to override stream closing when returning stream 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 部分很有用。 ***.com/tour 删除using
:应该是调用者Dispose
流
请勿发布代码图片
【参考方案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(...))
...
【讨论】:
以上是关于返回流C#时如何覆盖流关闭的主要内容,如果未能解决你的问题,请参考以下文章