[2014-9-10]异步编程

异步编程

启用一个应用程序,系统在内存中创建一个新的进程,进程是一组资源,包括虚拟地址控件,文件句柄和程序启动所需要其他载体。

进程中创建一个线程内核对象,线程体现了程序的真实执行情况。

默认情况下,一个进程包括一个线程,从程序的开始一直到程序的结束。

线程池(thread pool)

刚开始,进程的线程池为空,进程使用的线程被创建,并且完成了线程的执行,它不会销毁,而是加入到进程的线程池中。如果进程需要另外一个线程,CLR会从池中还原一个线程,节省时间。

异步编程模式

1.等待-直到完成,原始线程中断并等异步方法完成在继续

2.轮询,原始线程定期检查发起线程是否完成,如没有,可继续做其他。

3.回调

BeginInvoke从线程池中获取一个线程并在新的线程开始时运行引用方法。返回给调用线程一个实现IAsyncResult接口的对象,这个接口引用包含了

异步方法当前状态,原始线程可继续执行。

EndInvoke 获取由异步方法调用返回的值,并释放线程使用的资源。接受一个由BeginInvoke返回的IAsyncResult对象的引用,找到关联线程

等待-直到结束模式

原始线程发起一个异步方法的调用,做一些其他处理,然后停止并等待,直到开启线程结束。

IAsyncResult isa = del.BeginInvoke(3,5,null,null)

long result = del.EndInvoke(iar)

轮询模式

原始线程发起异步方法的调用,然后使用IAsyncResult对象的IsComplete属性定期检查开启的线程是否完成,如果异步方法已经完成,原始线程调用EndInvoke.

回调模式

等待直到结束模式和轮询模式中,初始线程继续自己的流程,知道它开启的线程完成。

回调模式不同在于,一旦初始线程发起异步方法,它就自己管自己,不再考虑同步,当异步方法结束,系统调用一个用户自定义方法来处理结果,并调用委托的EndInvoke方法

这个用户自定义的方法叫做回调方法

 void AsyncCallBack(ISyncResult iar)

IAsyncResult iar1=(del.BeginInvoke(3,5,new AsyncResult(),null))

原文地址:https://www.cnblogs.com/wuyuetian/p/3965120.html