C# 如何进行异步文件I/O操作 - ReadAsync和WriteAsync

来源:这里教程网 时间:2026-02-21 17:32:29 作者:

在 C# 中,

ReadAsync
WriteAsync
是进行高效、非阻塞文件 I/O 的核心方法,它们基于
Stream
类(如
FileStream
)提供真正的异步支持,避免线程池资源浪费,特别适合处理大文件或高并发 I/O 场景。

使用 FileStream 配合 ReadAsync 读取文件

必须用

FileOptions.Asynchronous
创建
FileStream
,否则
ReadAsync
会退化为同步调用(内部通过线程池模拟异步,失去性能优势)。

打开文件时指定
FileOptions.Asynchronous
推荐配合
Memory<byte></byte>
ArrayPool<byte>.Shared</byte>
复用缓冲区,减少 GC 压力
注意:
ReadAsync
返回实际读取字节数,可能小于缓冲区长度(尤其是流末尾或网络文件)
示例:
using var fs = new FileStream("data.bin", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true);
var buffer = new byte[8192];
int bytesRead = await fs.ReadAsync(buffer, CancellationToken.None);

使用 WriteAsync 写入文件的正确姿势

和读取一样,写入也依赖底层

FileStream
是否启用异步模式。未启用时,
WriteAsync
同样会同步执行。

创建
FileStream
时必须传入
useAsync: true
(即
FileOptions.Asynchronous
可直接写入
ReadOnlyMemory<byte></byte>
,无需复制到数组
若需确保数据落盘,调用
await fs.FlushAsync()
;但频繁刷盘影响性能,应按需使用
示例:
using var fs = new FileStream("output.txt", FileMode.Create, FileAccess.Write, FileShare.None, 4096, useAsync: true);
var data = Encoding.UTF8.GetBytes("Hello async world!");
await fs.WriteAsync(data, CancellationToken.None);
await fs.FlushAsync(); // 可选:强制写入磁盘

更简洁:File类的高级异步封装

.NET 提供了开箱即用的异步静态方法,内部已正确配置

FileStream
,适合简单场景(如读写整个小文件)。

File.ReadAllTextAsync
/
File.WriteAllTextAsync
:自动处理编码与流生命周期
File.ReadAllBytesAsync
/
File.WriteAllBytesAsync
:适合二进制内容
⚠️ 注意:这些方法会将整个文件加载到内存,不适用于超大文件(>100MB) 示例:
string content = await File.ReadAllTextAsync("config.json");
await File.WriteAllTextAsync("log.txt", "Done at " + DateTime.Now);

异常与取消处理不能少

异步 I/O 操作可能因磁盘满、权限不足、路径不存在等失败,且支持

CancellationToken
主动中断。

始终用
try-catch
捕获
IOException
UnauthorizedAccessException
等常见异常
CancellationToken
传给所有
Async
方法,响应用户取消或超时
注意:取消操作本身可能抛出
OperationCanceledException
,需单独处理
建议结构:
try
{
    await fs.WriteAsync(buffer, cancellationToken);
}
catch (OperationCanceledException)
{
    // 用户主动取消
}
catch (IOException ex)
{
    // 文件系统错误
}

基本上就这些。关键点就两个:用对

FileStream
的构造参数,别忘了传
useAsync: true
;再就是合理使用缓冲区和取消令牌。不复杂但容易忽略。

相关推荐

热文推荐