什么是.Net的异步机制(异步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
2  {
3    static string path = @"c:\file.txt";//确保你本地有这个文件
4    const int bufferSize = 5;//演示,一次只读取5 byte
5    static void Main()
6    {
7      FileStream fs = new FileStream(path, FileMode.Open,
8FileAccess.Read, FileShare.Read, 20480, false);//同步调用false
9      using (fs)//使用using来释放FileStream资源
10      {
11        byte[] data = new byte[bufferSize];
12        StringBuilder sb = new StringBuilder(500);
13        int byteReads;
14        do// 不断循环,直到读取完毕
15        {
16          byteReads = fs.Read(data, 0, data.Length);
17          sb.Append(Encoding.ASCII.GetString(data, 0, byteReads));
18        } while (byteReads > 0);
19        Console.WriteLine(sb.ToString());//输出到工作台
20
21      }//自动清除对象资源,隐式调用fs.Close();
22      Console.ReadLine();// 让黑屏等待,不会直接关闭..
23    }
24  }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索微软
, 方法
, stream
, system
, 同步
, filestream
, System.IO
, 异步io
, fs.read方法
异步读取
tfilestream 共享读写、java stream 异步、异步读写、opc 异步读写、异步文件读写,以便于您获取更多的相关知识。

时间: 2024-07-31 19:54:01

什么是.Net的异步机制(异步Stream读写)的相关文章

深入理解JavaScript编程中的同步与异步机制

  这篇文章主要介绍了深入理解JavaScript编程中的同步与异步机制,不仅仅是AJAX已经深入到了各个角落,Node.js的火爆也让JS的异步编程格外引人注目,需要的朋友可以参考下 JavaScript的优势之一是其如何处理异步代码.异步代码会被放入一个事件队列,等到所有其他代码执行后才进行,而不会阻塞线程.然而,对于初学者来说,书写异步代码可能会比较困难.而在这篇文章里,我将会消除你可能会有的任何困惑. 理解异步代码 JavaScript最基础的异步函数是setTimeout和setInt

什么是.Net的异步机制(APM核心IAsyncResult)

异步的核心: IAsyncResult Asynchronous Programming Model 整个异步调用过程中都是围绕IAsyncResult来进行的,大家可以看看上篇文章的例子,BeginXXX 返回这个对象,EndXXX接收这个对象来结束当前异步对象,下面我们来看看IAsyncResult 接口成员/和实现此接口的AsyncResult类成员(其中有些在上篇中已经涉及到) IAsyncResult接口 1public interface IAsyncResult 2 { 3 Wai

什么是.Net的异步机制(Invoke,BeginInvoke,EndInvoke)

我们怎样进行异步编程/开发? 现在扩充下上篇文章的类(AsyncTest),提供更多的例子并从中做下简单的对比, 从新的认识下异步的内部机制,下面我们增加一个新的委托 1步,我们添加一个新方法(计算年薪YearlySalary) public decimal YearlySalary(decimal salary, int monthCount, decimal bonus); 2步,为这个方法增加异步的功能,这样我们仍然使用委托(Delegate) public delegate decima

什么是.Net的异步机制(委托Delegate)

在阅读下面知识前,我已经认为你已经具有c#的基础,包括简单的委托知识; 代码使用VS2008开发,但是会在.Net Framework 2.0(C Sharp)编写 什么是.Net异步机制呢? 在解释这个话题前,我们先看看同步的程序,就是我们常用的Hello World 程序. Code 1: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 // 查看当前的线程ID, 是否线程池里面的线程 6 Console.WriteLi

.Net的异步机制(委托Delegate) - STEP 1

在阅读下面知识前,我已经认为你已经具有c#的基础,包括简单的委托知识; 代码使用VS2008开发,但是会在.Net Framework 2.0(C Sharp)编写 什么是.Net异步机制呢? 在解释这个话题前,我们先看看同步的程序,就是我们常用的Hello World 程序. Code 1: 1    class Program  2    {  3        static void Main(string[] args)  4        {  5            // 查看当前

Android中加载网络资源时的优化缓存和异步机制

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: public class MemoryCache { private static final String TAG = "MemoryCa

深入浅出: Java回调机制(异步)

什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道"就一个回调-".此时千万个草泥马飞奔而过(逃 哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉.不妨总结总结. 一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调是一种特殊的调用,至于三种方式也有点不同. 1.同步回调,即阻塞,单向. 2.回调,即双向(类似自行车的两个齿轮)

C#的委托异步机制

问题描述 搞不太懂,麻烦大神们给讲一下 解决方案 解决方案二:老板:小王啊帮我把这份文件去打印一份(IO操作)->beginInvoke开始异步操作小王去打印文件了老板继续干活上面的都是异步小王打印回来了小王:老板文件复印好了您看(taskcomplete)老板:好的我看看->老板停下手头工作看文件你地明白的干活??解决方案三:引用1楼xboxeer的回复: 老板:小王啊帮我把这份文件去打印一份(IO操作)->beginInvoke开始异步操作小王去打印文件了老板继续干活上面的都是异步小

什么是.Net的异步机制(线程间通信)

前几篇文章我已经对异步的操作进行的详细的解释.异步操作也是线程的一种,当我们开始一个异步操作(新线程),完成调用后需要和其他线程通信(可能需要告知状态信息),这时候我们就需要线程间的通信编程. 线程间通信 我们看下面的图 图1 我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对象(Synchronization Context), 线程B通过调用线程A的同步上下文对象来访问线程A,所有实现都是在同步上下文中完成的.线程B有两种方式