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();
}
});
}
请建议如何改进这段代码。
答案 0 :(得分:10)
您收到的警告是因为当您使用using
中的MemoryStream
时,编译器不够聪明,无法知道您永远不会在内存流的ContinueWith
块之外。
您通常不会混合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]);
}
}
在基于Close()
的任何对象上调用Stream
时,如果它位于using
语句中,则为多余的 1 ,因为处理它也会关闭流。
1:它也是多余的,因为MemoryStream.Close()没有被覆盖,base class just calls Dispose(true)和MemoryStream.Dispose(bool)除了将流标记为不可写之外什么都不做。