C# 使用APM执行受I/O限制的异步操作(转)
来源:互联网 发布:淘宝新店刷单技巧 编辑:程序博客网 时间:2024/05/08 19:37
为了从FileStream对象中同步地读取字节,我们可以调用它的Read方法,该方法的原型如下所示:
Public Int32 Read(Byte[] array , Int32 offset , Int32 count)
为了从文件中异步地读取字节,可以调用FileStream的BeginRead方法:
IAsyncResult BeginRead(Byte[] array, Int32 offset , Int32 numBytes , AsyncCallback userCallback , Object stateObject)
调用BeginRead方法时,我们在请求Windows将从文件中读取的字节填充到字节数组中。因为要执行I/O操作,所以BeginRead方法实际上将操作请求加入到Windows设备驱动程序的队列中,而Windows的设备驱动程序知道如何与正确的硬件设备通信。就这样,硬件接管了该操作,也就不需要任何线程来执行任何操作,甚至还不需要等待输出结果------ 这种方法相当高效!
BeginRead方法返回一个其类型实现了System。IAsyncResult接口的对象的引用。调用BeginRead方法时,它构建一个对象来惟一地标识I/O操作请求,并将请求加入Windows设备驱动程序的队列,然后将IAsyncResult对象返回给我们。我们可以将IAsyncResult对象看作收据。当BeginRead方法返回时,I/O操作只是被排队,它还没有完成。因此,我们还不能操作字节数组中的字节,因为数组中还有没有包含所请求的数据。
实际上,数组中可能已经包含了所请求的数据,因为I/O操作已经被异步地执行了,因此,在BeginRead方法返回时,数据可能已经被读取了。但是数据也有可能在几秒钟之后从服务器读取过来,因外,还有可能到服务器的网络连接已经瘫痪,数据永远也不会被读取过来。因为所有上西游记情误解都有可能发生,所以我们需要一种方法来发现实际上发生了哪一种情况,而且还要知道结果是什么时候检测到的,我们将这种情况称为异步操作结果的聚集(rendezvousing)。
- C# 使用APM执行受I/O限制的异步操作(转)
- 使用 WebClient 执行异步 I/O
- APM和计算限制的操作--CLR via c#
- Windows异步I/O读文件的缓存限制?
- C# 异步I/O模型
- C# I/O操作
- I/O限制性异步操作
- C#对象的I/O操作
- 异步非i/o操作和异步i/o
- c#执行异步操作
- Chapter10-“I/O设备的同步和异步”之I/O设备同步操作
- c# I/O相关操作
- C# I/O操作 笔记
- C#中I/O操作
- Node的异步 I/O
- node的异步I/O
- André Carvalho: 使用CGroups限制I/O(Using cgroups to limit I/O)
- C# APM 异步编程例子
- Latent Dirichlet Allocation详解
- 操作系统的线性地址
- 求a的N次方
- 你为谁工作-放弃责任就是放弃成功
- 推荐两个超牛的专利检索网站
- C# 使用APM执行受I/O限制的异步操作(转)
- 怎样在 Windows 系统上安装 WordPress 本地测试
- OLE & DOI
- Ubuntu10.04下关闭MySQL的开机启动
- 看别人相亲一定要淡定
- 我成功注册Google voice的方法
- asp.net页面传值方法汇总
- ubuntu 9.04 安装带调试功能的bochs (转)
- [SSL/TLS] SSL/TLS协议综合总结