新闻中心
C# 如何进行异步文件I/O操作 - ReadAsync和WriteAsync
ReadAsync和WriteAsync需配合FileOptions.Asynchronous创建FileStream才能真正异步,否则退化为同步;推荐复用ArrayPool.Shared缓冲区,File类静态方法适合小文件但不适用于超大文件。

在 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,适合简单场景(如读写整个小文件)。
神笔马良
神笔马良 - AI让剧本一键成片。
320
查看详情
-
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;再就是合理使用缓冲区和取消令牌。不复杂但容易忽略。
以上就是C# 如何进行异步文件I/O操作 - ReadAsync和WriteAsync的详细内容,更多请关注其它相关文章!
# 令牌
# 巢湖网站建设公司报价
# 搜索引擎seo开发搜索引擎seo
# 大庆seo优化技巧费用
# 韶关网站关键字优化
# 网站推广公司哪家口碑好
# 高栏港网站建设内容需求
# 武隆的网站推广怎么收费
# 安徽专业的网站推广服务
# 网站建设免费国外
# seo标题长度
# 可选
# 解决问题
# 不存在
# 中文网
# 相关文章
# c#
# 尤其是
# 大文件
# 复用
# 与非
# red
# .net
# file类
# stream
# ai
# access
# 字节
# 编码
# json
# js
# 异步文件i/o
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
不同用户不同价格! 索尼开启账户个性化定价测试
在Go Martini框架中高效服务动态生成图像的实践指南
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Eclipse怎么运行工程_Eclipse工程运行配置说明
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
Go Martini框架:动态服务解码后的图片内容
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
Steam官网入口直达 Steam注册及登录步骤
Log4j Console Appender性能瓶颈与高并发优化策略
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
深入理解与实现最大堆的Heapify过程:常见错误与修正
C++ vector二维数组定义_C++ vector of vector用法
C++ map遍历方法大全_C++ map迭代器使用总结
Archive of Our Own官网直达 AO3最新可用地址一览
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
利用5118提升短视频内容效果_5118短视频关键词优化方法
windows10怎么关闭系统提示音_windows10彻底静音设置方法
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
抓大鹅无需下载版 抓大鹅秒玩版入口
如何将HTML表格多行数据保存到Google Sheet
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
html5 app怎么运行环境_配html5 app运行环境【教程】
优化Log4j2控制台输出性能:解决异步日志瓶颈
微信网页版扫码登录入口 微信网页版二维码登录入口
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
蛙漫2台版漫画地址 Manwa2正版网页版链接
126邮箱网页版官方入口 126邮箱账号在线登录平台
TikTok网页版直接登录 TikTok网页端官方平台入口
如何使 Jest 模拟函数默认抛出错误以提高测试效率
12306选座如何查看座位示意图_12306座位示意图解读与使用
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
Lar*el Form Request中唯一性验证在更新操作中的正确实现
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
解决 MongoDB 聚合查询中对象数组 _id 匹配问题
C++指针和引用有什么区别_C++内存管理核心概念深度解析


2025-12-04
浏览次数:次
返回列表