日期:2014-05-18  浏览次数:21204 次

“同步读写操作”和“异步读写操作”,是什么意思?谢谢
比如MSDN中的FileStream 类:公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。
这里的“同步读写操作”和“异步读写操作”是什么意思?最好给举个例子哈:)。谢谢!

------解决方案--------------------
同步是指同一线程的程序执行 也就是我们日常编程一样的,它是按我们编写的程序顺序执行的。
异步是指不同线程的程序执行(可以是这样理解,实际上,这一个异步的线程是由代码自动产生的,并在线程执行完后会插入到现有的代码入口)

举一个例子容易理解:打个比方说,我们编写一个 FlashGet一样的程序用以下载网页,比方说,现在我要下载 网页1
如果使用同步执行,使用WebClient里面的DownloadFile(URL)
MessageBox.Show("1")
 WC.DownloadFile(网页1);
MessageBox.Show("2")
那么,在完成这文件的下载之前,不会显示2出来,你得一直在等它的下载,如果这个文件比较大,那么。。。你有得等了,因为你除了发呆,对你的程序做不了任何的操作。我们要等待程序与网站握手的时候,我们要等待文件下载到本地的时间。。。我们一直在等待

但是,异步就不一样了。同样我们要下载文件我们使用WebClient里面的 DownloadFileAsync 调用它的异步下载
那么,同样的代码 
MessageBox.Show("1")
WC.DownloadFileAsync(网页1)
MessageBox.Show("2")
执行后,你立即就能显示 2的message了

那么,你可以要问,我们如何知道我们的网页已经下载完成了,比方说,我们1网页下载完成,我们要显示 “完成网页1”,其实很简单,就如同上面我说的
我们要为我们当前的程序增加一个异步线程的入口 ,像WC的异步下载我们要为它增加一个下载完成的函数
wc.DownloadDataCompleted+=new System.Net.DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);

当异步下载完成时,这一个wc_DownloadDataCompleted函数就会被触发
void wc_DownloadDataCompleted(object sender, System.Net.DownloadDataCompletedEventArgs e)
{
MessageBox.Show("完成网页1");
}
这个。。。是不是很简章?呵呵

特别是像.Net里面的异步,基本上都提供了完善的机制与函数,只需要去加载就行了