异步IO
异步读写机制对于比较耗时的文件读写操作,例如大型的文件或者从网路下载的的数据甚至读取慢速的存储设备都特别有用。与异步IO相比,同步IO在应用程序必须完成一个处理才能开始进行下一个处理;而异步IO在读或写一个文件的时候,同时能够执行其他的操作,异步IO一般由方法BeginRead()和方法BeginWrite()支持。异步IO一般包括以下步骤:
- 自定义一个无返回值的方法,这个方法的签名需要和委托AsynCallBabk的签名一致。(无返回值,把IAsyncResult接口的引用作为参数。)
- 创建一个AsynCallBabk委托,将1步创建的方法作为参数。
- 使用BeginRead()方法读取文件。
- 使用方法EndRead()方法获得所读取的字节数组。
比如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace ConsoleApplication1 { class AsynchronousIO { FileStream fs; double longNum = 100000000; static void Main(string[] args) { AsynchronousIO asy = new AsynchronousIO(); asy.LongWrite(); Console.Read(); } public void LongWrite() { byte[] bt = new byte[100000000]; for (int i = 0; i < longNum; i++) { bt[i] = (byte)i; } Console.WriteLine("数据正在写入...."); AsyncCallback myCallback = End;//当异步操作完成时调用End方法。 fs = new FileStream("d://text.txt", FileMode.OpenOrCreate); fs.BeginWrite(bt, 0, bt.Length - 1, myCallback, null);//调用异步操作,程序继续向下执行(不会等待) Console.WriteLine("正在将文件写入数据.....");
} public void End(IAsyncResult asyncResult) { fs.Close(); Console.WriteLine("写入完毕"); } } }
|
在以上程序当中,我们将大容量数据写入文件,并采用异步写入的方式。在调用到BeginWrite()方法的时候开始写入文件,但程序并不会等待文件的写入完成,而是继续向下执行,执行代码Console.WriteLine("正在将文件写入数据.....");,但文件写入完成后将执行委托myCallback 所指向的End()方法。这便是异步执行的好处了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理