您的位置:首页 > 其它

什么是.Net的异步机制(异步Stream读/写) - step 4

2009-01-08 09:02 423 查看
在前面3篇文章,我已经介绍了异步的工作原理和相关方法和参数的应用.下面我们介绍Stream流的操作, 并使用System.IO.FileStream来揭开如何开发异步的Stream(System.IO.Stream) 读/写操作

异步的Stream/写操作

下面是继承于System.IO.Stream的类

System.IO.Stream

Microsoft.JScript.COMCharStream

System.IO.BufferedStream

System.IO.FileStream

System.IO.MemoryStream

System.IO.UnmanagedMemoryStream

System.Security.Cryptography.CryptoStream

System.Printing.PrintQueueStream

System.IO.Pipes.PipeStream

System.Data.OracleClient.OracleBFile

System.Data.OracleClient.OracleLob

System.IO.Compression.DeflateStream

System.IO.Compression.GZipStream

System.Net.Sockets.NetworkStream

System.Net.Security.AuthenticatedStream

在System.IO.Stream中提供了异步的读/写(Read/Write)行为,上面继承于System.IO.Stream的类都具有同样的异步操作行为.在.Net Framework框架中,微软设计师使用Begin+同步方法名 / End+同步方法名来设计异步方法的规则,基本上我们在微软MSDN看到的 BeginXXX + EndXXX都是异步的方法,并且当我们在某个类中看到BeginInvoke / EndInvoke,都是微软提供的最原始的异步方法.在System.IO.Stream类中表现为BeginRead+EndRead / BeginWrite/EndWrite.

我们来看一个例子,FileStream(System.IO),Read / BeginRead+EndRead,读取文件内容,开始我们使用同步方法.

同步调用

Code1.1

1static class Program

2static class Program

2static class Program

2static class Program

2 {

3 static void Main()

4 {

5 FileStream fs = new FileStream("text.txt", FileMode.Create,

6FileAccess.ReadWrite, FileShare.None, 20480, true);//设置异步调用true

7 //输入信息

8 Console.Write("Please Enter:");

9 byte[] data = Encoding.ASCII.GetBytes(Console.ReadLine());

//异步写文件

IAsyncResult async = fs.BeginWrite(data, 0, data.Length, asyncResult =>

{

fs.EndWrite(asyncResult);//写文件介绍,输出到text.txt文件中.

fs.Close();

}, null);

Console.ReadLine();// 让黑屏等待,不会直接关闭..

}

}

大家觉得是否很简单呢? 基本上所有具有异步行为的流(继承于System.IO.Stream)操作都可以按照类似于上面的代码编写. 当然其他异步行为也可以使用上面代码中的技巧. 在System.IO.Stream 中,提供了ReadTimeout/WriteTimeout 的超时处理,但是基类中是不支持的.会报 InvalidOperationException 异常,反编译可以看到throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_TimeoutsNotSupported")).

下篇文章我会提供其他的例子来说明异步中的线程间通信.采用Window Forms程序.

以上有word 文档直接粘贴,排版可能不太好看,你可以通过下面来下载相应的代码/文档

1,文档

2,代码(VS2008开发,.Net Framework 3.5(C Sharp)编写)

文章为原创,如果需要引用,请保留原地址. 有什么问题/错误的地方请联系 fox7805034 (at) hotmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: