异步 等待异步 异步回调 获取异步结果
来源:互联网 发布:网络合作合同 编辑:程序博客网 时间:2024/04/28 12:36
异步 是通过委托来实现的
异步就是另开一个线程 去执行委托里面的方法体
整个代码全部一下子贴出来
Console.WriteLine("程序开始"); Func<string,string> fun = t => { //等待2秒 容易看效果 Thread.Sleep(2000); Console.WriteLine("{0}进入方法,线程ID{1}",t,Thread.CurrentThread.ManagedThreadId); return DateTime.Now.ToString(); }; IAsyncResult iasyncResult=null; AsyncCallback asybak = t => { //获取异步方法的返回值 string result= fun.EndInvoke(iasyncResult); //休眠3秒 Thread.Sleep(3000); //输出 Console.WriteLine("参数值为:{0},返回结果为:{1},线程ID{2}", t.AsyncState, result, Thread.CurrentThread.ManagedThreadId); }; fun.Invoke("直接调用"); //异步调用 iasyncResult = fun.BeginInvoke("异步调用",asybak, "传过去的参数"); //等待异步 方法1 while (!iasyncResult.IsCompleted) { Console.WriteLine("异步正在进行中"); Thread.Sleep(500); } //等待异步 方法2 //这种方法可以设置 在等待异步多少秒之后,如果异步还没有执行完 就不等了 继续往下执行 //iasyncResult.AsyncWaitHandle.WaitOne(1000); //等待异步 方法3 //注意 EndInvoke 只能存在一个,回调中 通过这里获取返回值了,这里就不能存在了 //思路:可以在上面设置一个变量,在这里赋值 在回调里面用 //fun.EndInvoke(iasyncResult); Console.WriteLine("程序执行结束");看结果
可以从结果中 总结出以下几点
1、异步调用和普通调用 用的不是一个线程 异步是另申请了一个线程执行的
2、异步等待,等待的只是委托方法体里面的方法体,这里面的执行完了 就算等待完了,而并不是等待回调执行完
3、每种等待 都会阻塞当前代码执行
4、BeginInvoke中最后一个参数 可以作为AsyncState参数传递到回调函数中
0 0
- 异步 等待异步 异步回调 获取异步结果
- 异步等待
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 异步
- 等待一个异步function的结果
- 异步委托-等待委托
- JAVA 线程调度
- 欢迎使用CSDN-markdown编辑器
- 深入理解BufferedInputStream实现原理
- 使用Charles为Android设备抓取https请求的包
- python yield生成器实验
- 异步 等待异步 异步回调 获取异步结果
- Centos7程序里面判断系统是否正在关机或者重启(Check if Centos7 is rebooting or shuting down in program.)
- xsi:schemaLocation详解
- C# System.Object
- kafka java Api 地址
- VSCode里的一些有用的插件
- vi编辑器(2)
- Ueditor插入图片后换行
- tomcat中部署好的项目,内网和localhost可以访问,但是外网不能访问(Windows 2008 R2中)