四种方式实现.NET异步编程实例代码总结

今天在公司,忙里偷闲,总结一下.NET中的异步调用函数的实现方法,DebugLZQ在写这篇博文之前自己先动手写了
【菜科解读】
最近很忙,既要外出找工作又要兼顾老板公司的项目。
今天在公司,忙里偷闲,总结一下.NET中的异步调用函数的实现方法,DebugLZQ在写这篇博文之前自己先动手写了本文的所有示例代码,开写之前是做过功课的,用代码说话方有说服力。
本文的内容旨在用最简洁的代码来把异步调用的方法说清楚,园子里的高手老鸟可以绕行,不喜勿喷,非诚勿扰~
lz的前一篇文章简单的说了下异步,主要是从理解上来讲;这篇文章主要写具体的实现方法。
实现异步编程有4种方法可供选择,这4种访求实际上也对应着4种异步调用的模式,分为“等待”和“回调”两大类。
四种方法,我在代码中都进行了详细的注释,这里不罗嗦了,直接用代码说明吧
第一种方法:BeginEnvoke EndEnvoke方法,属于“等待”类。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 异步调用实现方法汇总 /// /// 异步调用方法总结: /// 1.BeginEnvoke EndEnvoke /// 当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕 /// class Program public delegate void PrintDelegate(string s); static void Main(string[] args) PrintDelegate printDelegate = Print; Console.WriteLine("主线程"); IAsyncResult result= printDelegate.BeginInvoke("Hello World.", null, null); Console.WriteLine("主线程继续执行..."); //当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕 printDelegate.EndInvoke(result); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); public static void Print(string s) Console.WriteLine("异步线程开始执行:"+s); Thread.Sleep(5000);
需要注意的地方,代码中都有注明了,程序运行结果如下:第二种方法:WaitOne。
同样属于“等待”类。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 异步调用实现方法汇总2 /// /// 异步调用方法总结: /// 2.WaitOne /// 可以看到,与EndInvoke类似,只是用WaitOne函数代码了EndInvoke而已。/// class Program public delegate void PrintDelegate(string s); static void Main(string[] args) PrintDelegate printDelegate = Print; Console.WriteLine("主线程"); IAsyncResult result = printDelegate.BeginInvoke("Hello World.", null, null); Console.WriteLine("主线程继续执行..."); result.AsyncWaitHandle.WaitOne(-1, false); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); public static void Print(string s) Console.WriteLine("异步线程开始执行:" + s); Thread.Sleep(5000);}
需要注意的地方,代码中都有注明了,程序运行结果如下:
第三种方法:轮询。
也是属于“等待”类。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 异步调用实现方法汇总3 /// /// 异步调用方法总结: /// 3.轮询 /// 之前提到的两种方法,只能等下异步方法执行完毕, /// 在完毕之前没有任何提示信息,整个程序就像没有响应一样,用户体验不好, /// 可以通过检查IasyncResult类型的IsCompleted属性来检查异步调用是否完成, /// 如果没有完成,则可以适时地显示一些提示信息 /// class Program public delegate void PrintDelegate(string s); static void Main(string[] args) PrintDelegate printDelegate = Print; Console.WriteLine("主线程:"+Thread.CurrentThread.ManagedThreadId ); IAsyncResult result = printDelegate.BeginInvoke("Hello world.", null, null); Console.WriteLine("主线程:" + Thread.CurrentThread.ManagedThreadId + ",继续执行..."); while (!result.IsCompleted) Console.WriteLine("."); Thread.Sleep(500); Console.WriteLine("主线程:" + Thread.CurrentThread.ManagedThreadId + " Press any key to continue..."); Console.ReadKey(true); public static void Print(string s) Console.WriteLine("当前线程:" + Thread.CurrentThread.ManagedThreadId + s); Thread.Sleep(5000);}需要注意的地方,代码中都有注明了,程序运行结果如下:
第四种方法:回调。
当然属于“回调”类。
推荐!!!!
之前三种方法者在等待异步方法执行完毕后才能拿到执行的结果,期间主线程均处于等待状态。
回调和它们最大的区别是,在调用BeginInvoke时只要提供了回调方法,那么主线程就不必要再等待异步线程工作完毕,异步线程在工作结束后会主动调用我们提供的回调方法,并在回调方法中做相应的处理。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 异步调用实现方法汇总4 /// /// 异步调用方法总结: /// 4.回调 /// 之前三种方法者在等待异步方法执行完毕后才能拿到执行的结果,期间主线程均处于等待状态。/// 回调和它们最大的区别是,在调用BeginInvoke时只要提供了回调方法,那么主线程就不必要再等待异步线程工作完毕, /// 异步线程在工作结束后会主动调用我们提供的回调方法,并在回调方法中做相应的处理,例如显示异步调用的结果。
/// class Program public delegate void PrintDelegate(string s); static void Main(string[] args) PrintDelegate printDelegate = Print; Console.WriteLine("主线程."); printDelegate.BeginInvoke("Hello world.", PrintComeplete, printDelegate); Console.WriteLine("主线程继续执行..."); Console.WriteLine("Press any key to continue..."); Console.ReadKey(true); public static void Print(string s) Console.WriteLine("当前线程:"+s); Thread.Sleep(5000); //回调方法要求 //1.返回类型为void //2.只有一个参数IAsyncResult public static void PrintComeplete(IAsyncResult result) (result.AsyncState as PrintDelegate).EndInvoke(result); Console.WriteLine("当前线程结束." + result.AsyncState.ToString());}
需要注意的地方,代码中都有注明了,程序运行结果如下:
以上就是四种实现异步调用函数的四种方法,说的很清楚了,就写这么多~
四种,方式,实现,.NET,异步,编程,实例,代码,社保卡需要激活吗?有哪几种激活方式?(2025/03/29)
在银行柜台,按照工作人员的指引,填写相关激活表格。
提交身份证和社保卡,工作人员会核实个人信息,并完成激活过程。
社保卡怎么激活?第2种方式:社保经办机构激活携带身份证和社保卡,前往当地社保经办机构。
在经办机构窗口,提交身份证和社保卡,并告知工作人员需要激活社保卡。
工作人员会核实个人信息,并完成激活手续。
社保卡怎么激活?第3种方式:电话激活拨打社保热线12333,接通后按“0”转接人工服务。
提供个人身份证信息和社保卡卡号,以便客服人员核实身份。
在客服人员的协助下,按照提示完成社保卡的激活。
二、社保续交手续:社保续交需要哪些手续? 离职无单位续保如果你离职以后没有单位,但自己还想缴纳社保,那就可以去社保局办理个人社保续保。
也就是凭解除劳动关系的证明,前往你原来单位所在地的市人社局办理缴费手续,也可以到你户籍所在地的区人社部门办理个人参保手续社保缴费。
具体操作如下:1、想要办理个人社保缴费,就需要持个人身份证和单位解除劳动合同关系的证明去当地社保局,把公司代缴社保转为个人缴费,因为你没有在单位工作,那就需以灵活就业人员的身份才能进行个人社保续保。
2、根据自己的交费能力选择一个档进行社保续保缴费。
而缴费的基数越高,个人社保缴费就越多,你的个人帐户也会相应存入更多的钱。
3、个人一般只允许缴纳养老、医疗和生育保险,只有单位才能办理五险一金。
慈禧太后是怎么样对待宫女和太监的 她都用了什么方式
慈禧17岁就进宫了,摸爬滚打了二十年之后,终于成为了万人之上的存在。
作为统治者,自然有属于自己管理手下的办法,那么残暴的慈禧是怎样对待宫女和的呢? 首先我们要明确宦官这个职业是干什么的。
如果往好了说,那就是皇帝的近臣,虽然在朝堂之上皇帝和大臣们讨论天下之势,可是在私下里,皇帝与太监的交流会更多,而也正因为如此,才有了、之流的出现。
而到了晚清的时候,太监虽然没有时期那么能够干涉权力,但是在宫中的生活还算可以,当然,毕竟这是净身所付出的代价。
慈禧时期,出现过两个有名的太监,也就是安德海以及李莲英,即便是他们这种几乎已经成为慈禧生活的一部分的太监,依旧在慈禧的权欲和残暴面前。
而慈禧针对其他普通的宦官,残暴手段也是无所不用其极,在这里主要说她的两种刑罚。
第一个就是连坐,我们知道秦汉时期诛九族这种刑罚就已经出现了,而连坐,则是指一个太监犯错之后,和他住在一起的所有太监都要受罚。
第二个就是气毙,顾名思义,就是把犯错的人活活憋死,具体就是用湿布捂住口鼻。
当然,气毙这种刑罚只是针对死罪之人,而连坐则是免不了皮肉之苦,也正因如此,有些太监时时刻刻都在腿上绑着牛皮,这样在被抽打的时候起码能减轻一些痛苦。
而除了太监之外,在慈禧的眼里,如果宫女有做的不合自己心意的地方,她同样用非常残暴的手段对待。
慈禧可以为了自己的权力做出任何事情。
如果说宫女和太监在慈禧的眼中命如草芥,那么凡是阻挡慈禧政治意图的人,也同样下场不是很好,最典型的就是皇帝和他所深爱的了,前者因为一味推行变法,被慈禧用软禁的方法制裁,戊戌六君子也是下场惨不忍睹。
后者因为总被慈禧视为眼中钉,最后更是直接被推入井中,怀着怨恨离世。
这样残暴的慈禧,也难怪后人们对她的评价非常差了。
随机文章1998年大洪水出现龙尸真相,疑似数百米巨龙翻身所致世界上最大战斗机图128,长30米是狂风战斗机3倍美国NASA探测器升空寻找另一个地球,寻找外星人成为探测的重点大自然的奇妙声音,奇妙的声音十大用途(回声定位/治疗癌症)改变生活的未来黑科技,盘点十大未来可能出现的科技/寿命延长30%