使用using子句时,是否需手动调用FileStream的DisposeAsync?
手动调用DisposeAsync()在using声明中是否多余?
是的,这里手动执行await createStream.DisposeAsync()完全属于多余操作,甚至可能带来不必要的风险。
关键原因:
- using声明的自动管理逻辑:C#的
using声明(即代码中的using FileStream createStream = File.Create(fileName)写法),会在代码块执行完毕后,自动调用对象的DisposeAsync方法(FileStream实现了IAsyncDisposable接口,符合异步释放的要求),完全不需要手动触发。 - 重复释放的潜在问题:手动调用
DisposeAsync()后,using声明会再次尝试释放同一个流对象。虽然部分.NET内置类能处理重复释放的场景,但这属于不规范的写法,可能引发不可预期的异常,不符合代码最佳实践。
修正后的正确代码:
using FileStream createStream = File.Create(fileName); // ...write to stream etc.. // 无需手动调用DisposeAsync(),using会自动完成资源释放
内容的提问来源于stack exchange,提问作者me.at.coding
相关产品推荐
相关产品推荐

