You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C# 13编译器建议对File.OpenRead()使用await using?

关于C#中await using的疑问解答

你的代码示例:

await using (var streamReader = File.OpenRead(filePath))
using (var reader = new StreamReader(streamReader))
{
    while ((line = await reader.ReadLineAsync()) != null)
    {
      // my logic
    }
}

你混淆了await的两种不同用法:

  • 一种是用于等待Task/ValueTask类型的异步方法执行完成,比如await reader.ReadLineAsync(),这里确实是因为方法返回Task才需要await。
  • 另一种是await using,它的作用和Task无关,专门用于处理实现了**IAsyncDisposable**接口的对象。

File.OpenRead()返回的FileStream在.NET 5及之后的版本里实现了IAsyncDisposable接口。当你用await using声明这个对象时,代码块结束后编译器会自动调用它的DisposeAsync()方法——这是一种异步释放资源的方式,相比同步的Dispose(),它不会阻塞调用线程,对IO类资源(比如文件流)来说,在高并发场景下能提升性能。

编译器建议替换成await using,本质是推荐你用异步方式释放文件流资源,和File.OpenRead()是否返回Task没有关系。

内容的提问来源于stack exchange,提问作者Manan Adhvaryu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:27:03