概述
C# 异步编程: 不需要等待,谁先出结果谁先出来
- 声明委托
- 根据委托定义实现方法
- 异步调用 :
(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
最后
以上就是无私山水为你收集整理的c#异步编程的全部内容,希望文章能够帮你解决c#异步编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复