[英]Access to disposed closure
using (var memoryStream = new MemoryStream())
{
await
response
.Content
.CopyToAsync(memoryStream)
.ContinueWith(
copyTask =>
{
using (var import = new Import())
{
var data = memoryStream.ToArray();
import.SaveDocumentByRecordNum(data, fileName, items[0]);
memoryStream.Close();
}
});
}
请建议如何改进这段代码。
你得到的警告是因为当你在ContinueWith
使用MemoryStream
时,编译器不够聪明,不知道你永远不会在内存流的using
块之外。
你通常不混合async / await和ContinueWith
,切换到只使用async / await本身也会修复你的警告。 以下代码将与您的旧代码一样,但不会导致警告。
using (var memoryStream = new MemoryStream())
{
await response.Content.CopyToAsync(memoryStream).ConfigureAwait(false);
using (var import = new Import())
{
var data = memoryStream.ToArray();
trimImport.SaveDocumentByRecordNum(data, fileName, items[0]);
}
}
当它在using
语句中时,对任何基于Stream
的对象调用Close()
也是冗余1 ,因为处理它也将关闭流。
1:它也是多余的,因为没有重写MemoryStream.Close()并且基类只调用Dispose(true)而MemoryStream.Dispose(bool)除了将流标记为不可写之外不会执行任何操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.