c#异步编程

C# 异步编程:  不需要等待,谁先出结果谁先出来

  1. 声明委托
  2. 根据委托定义实现方法
  3. 异步调用 :

(1)     创建委托变量并指向具体方法(代表方法)

**通过委托异步调用方法:

*委托类型的BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法 

异步调用的核心, BeginInvoke(多线程能执行的原因)。

输入和输出变量:表式委托对应的实参。

第二个参数(AsyncCallback callback):回调函数,表示异步调用后自动调用的函数。AsyncCallback是一个委托

第三个参数(object asyncState):用于向回调函数提供参数信息。返回值:IasyncResult:异步操作状态接口,封装了异步执行中的参数。

EndInvoke监视BeginInvoke。委托类型的EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。该方法知道异步调用的方法所有参数,所以,异步调用完毕后,取出异步调用的结果作为返回值。

(2)     异步调用任务:

  IasyncResult result=委托变量.BeginInvoke(方法的参数,null,null)

         (3)同时执行其他任务(同步)

        (4)获取异步执行的结果

               任务的类型  res=委托变量.EndInvoke(result);

                EndInvoke()方法不断循环检测运算是否结束。

总的思想:方法是通过委托变量的委托BeginInvoke()对象异步执行,EndInvoke()观察异步执行是否完

小知识:在异步中当子线程没有完成让主线程等待的做法    主线程等待异步执行完成的三种方法      线程等待

(1)result.AsyncWaitHandle.WaitOne(-1)//一直等到子线程结束   此时变成了同步

(2)while(!result.IsCompleted)

{

Thread.Sleep(100);

}

(3)委托变量.EndInvoke(result);//主线程等待异步执行完成

原文地址:https://www.cnblogs.com/wfaceboss/p/6372172.html