博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步委托
阅读量:5143 次
发布时间:2019-06-13

本文共 3370 字,大约阅读时间需要 11 分钟。

无回调函数的异步委托:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Threading; 7  8 namespace 异步委托 9 {10     class Program11     {12         static void Main(string[] args)13         {14             Func
delFunc = (a, b) => 15 { 16 return (a + b).ToString();17 };18 //异步调用委托19 IAsyncResult result = delFunc.BeginInvoke(3, 4, null, null); //内部原理:使用了一个线程池的线程去执行了委托执向的方法20 //获取异步委托的结果21 if (result.IsCompleted) //判断异步委托是否执行完成,返回布尔值22 {23 string str = delFunc.EndInvoke(result); //EndInvoke方法会阻塞当前的线程,直到异步委托执行完成之后,才能继续往下执行24 Console.WriteLine(str);25 }26 Console.ReadKey();27 }28 }29 }

 有回调函数的异步委托:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Threading; 7 using System.Runtime.Remoting.Messaging; 8  9 namespace 异步委托10 {11     class Program12     {13         static void Main(string[] args)14         {15             Func
delFunc = (a, b) => 16 { 17 return (a + b).ToString();18 };19 ////异步调用委托20 //IAsyncResult result = delFunc.BeginInvoke(3, 4, null, null); //内部原理:使用了一个线程池的线程去执行了委托执向的方法21 ////获取异步委托的结果22 //if (result.IsCompleted) //判断异步委托是否执行完成,返回布尔值23 //{24 // string str = delFunc.EndInvoke(result); //EndInvoke方法会阻塞当前的线程,直到异步委托执行完成之后,才能继续往下执行25 // Console.WriteLine(str);26 //}27 delFunc.BeginInvoke(3, 4, MyAsyncCallback, "123");28 Console.ReadKey();29 }30 //回调函数:是异步委托方法执行完成之后,再来调,回调函数31 public static void MyAsyncCallback(IAsyncResult ar)32 {33 //1、拿异步委托执行的结果34 AsyncResult result = (AsyncResult)ar;35 var del =(Func
)result.AsyncDelegate; //拿到委托的实例:delFunc36 string returnValue = del.EndInvoke(result);37 Console.WriteLine("返回值:"+returnValue);38 //2、拿到给回调函数的参数39 Console.WriteLine("传给异步回调函数的参数:"+result.AsyncState); 40 }41 }42 }

效果

有回调函数更优方法:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Threading; 7 using System.Runtime.Remoting.Messaging; 8  9 namespace 异步委托10 {11     class Program12     {13         static void Main(string[] args)14         {15             Func
delFunc = (a, b) => 16 { 17 return (a + b).ToString();18 };19 delFunc.BeginInvoke(3, 4, MyAsyncCallback, delFunc);20 Console.ReadKey();21 }22 //回调函数:是异步委托方法执行完成之后,再来调,回调函数23 public static void MyAsyncCallback(IAsyncResult ar)24 {25 var del= (Func
)ar.AsyncState;26 string returnValue = del.EndInvoke(ar);27 Console.WriteLine("返回值:" + returnValue);28 Console.WriteLine("传给异步回调函数的参数:" + ar.AsyncState);29 }30 }31 }

 

转载于:https://www.cnblogs.com/chenyanbin/p/11042991.html

你可能感兴趣的文章
如何开启safari的调试
查看>>
js深拷贝和浅拷贝
查看>>
node.js 基础学习笔记1
查看>>
如何在linux系统中设置静态ip地址
查看>>
二分查找法,折半查找原理
查看>>
DP简单问题联系--最长递增子序列+最长公共子序列等
查看>>
2017-4-18 Zabbix server的安装以及ansible批量部署zabbix agent的工作笔记
查看>>
GridView 动态列上方添加相应的Combox等控件
查看>>
申请开发者账号
查看>>
oracle启动
查看>>
c++模板学习
查看>>
【转】MySQL Event
查看>>
[转]html5监听任何App自带返回键javascript事件
查看>>
通俗理解LDA主题模型
查看>>
jzoj5813
查看>>
HttpServletRequest 获取URL的方法及区别
查看>>
VMware环境和Window环境进行网络连接的问题
查看>>
macOS10.12允许所有来源设置
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>