首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IASyncResult接口实现简单异步编程

1、异步编程是建立在委托基础上的编程方法

2、异步调用的每个方法都是在独立线程中执行的,因此本质上就是一种多线程程序。

3、比较适合在后台运行较为耗费时间的《简单任务》

4、如果后台任务要求必须按照特定顺序执行,或者访问特定的共享资源,则不适合使用异步编程,比较适合使用多线程编程。

下面的代码实现了不使用Thread,不使用Task实现异步编程

使用了IASyncResult接口和AsyncCallback委托

class Program{publicdelegateintAddDelegate(intnum);publicstaticvoidMain(string[] args) { Console.WriteLine("开始同步执行"); Add1(10); Add2(20); Console.ReadLine(); Console.WriteLine("开始异步编程了"); AddDelegate addDel = Add2;//AsyncCallback委托要用的方法必须是IAsyncResult参数,该参数存了回调方法所需参数为object对象。AsyncCallback callBack = Add3;//IASyncResult参数1-N由自定义委托AddDelegate决定,AddDelegate有N个参数,那么就有N个参数//callback为AsyncCallback委托,可为null,最后一个参数表示回调函数的参数,该值被存在 re.AsyncState中(为object对象)IAsyncResult result = addDel.BeginInvoke(20, callBack,10); Add1(10);//委托.EndInvoke(result)相当于一个监视器,一直在监视异步委托执行完成,一旦完成,则获取到结果并赋值到re中,与此同时会异步调用回调函数(有回调的情况下)。varre = addDel.EndInvoke(result); Console.WriteLine("Add2执行结果="+ re); Add1(1); Add1(5); Add1(10); Console.ReadLine(); }publicstaticintAdd1(inta) { Console.WriteLine("开始ADD1");returna * a; }publicstaticintAdd2(inta) { Console.WriteLine("开始Add2"); System.Threading.Thread.Sleep(5000);returna * a; }publicstaticvoidAdd3(IAsyncResult re) {vara = re.AsyncState; Console.WriteLine("执行回调="+ a); }}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180914G1L2AL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券