您的位置:首页 > 其它

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

2013-05-29 09:46 465 查看
在前面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

static 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());
10
11 //异步写文件
12 IAsyncResult async = fs.BeginWrite(data, 0, data.Length, asyncResult =>
13 {
14 fs.EndWrite(asyncResult);//写文件介绍,输出到text.txt文件中.
15 fs.Close();
16
17 }, null);
18
19 Console.ReadLine();// 让黑屏等待,不会直接关闭..
20 }
21 }



大家觉得是否很简单呢? 基本上所有具有异步行为的流(继承于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)编写)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: