在msdn上读到 使用 AsyncEnumerator 简化 APM 一文,深感启发,但是找寻power threading库的源代码未果,遂山寨之,简陋不周之处多多包涵。

.NET下通过AsyncCallback回调来实现异步访问IO,比如FileStream,NetworkStream,之类的都有BeginXXX,和EndXXX等成对出现的方法,将实现AsyncCallback回调的方法作为参数传递给BeginXXX方法,在AsyncCallback回调的方法中调用EndXXX方法来结束一次异步回调。这是异步操作的一般模式。

先看一段同步的读取文件的方法:
            }
如果改成异步的方式,这个方法就要被拆分成两个方法,由于一次read只能读取一段,那么还需要额外的同步读取进度的对象,比如int rc,long total,byte[] buffer之类的具备变量就需要升格成为类变量。而读取的逻辑也由于方法被拆分而变得很难理解,代码如下:

        }
我们可以看到这样子的代码很晦涩,且IO类的资源回收成了一个问题,在同步的模式下在一个方法里只需要使用using结构就不用担心IO的资源回收,这里我们就需要外部的类实现IDisposable接口来保证对IO资源的回收。
为了使异步模式更加容易理解,我们需要把分开地方法合并起来。前文         }

相关文章:

  • 2022-01-10
  • 2022-12-23
  • 2021-10-14
  • 2021-07-09
  • 2021-07-09
  • 2022-01-02
  • 2021-10-10
猜你喜欢
  • 2021-10-25
  • 2021-06-16
  • 2022-12-23
  • 2022-01-20
  • 2022-12-23
  • 2022-12-23
  • 2021-06-24
相关资源
相似解决方案