IASyncResult接口实现简单异步编程

原创 2017年12月22日 13:56:47

我有一个梦想,是改变世界,这是很多技术人员的梦想;从小事做起,踏实做人做事,当身边的人或事因为自己能像更好的方向改变或发展的时候,那就是在改变世界,至花甲之时,可能我的梦想也无法实现,但我会一直追逐着他前行。我相信蝴蝶效应。荣耀的背后可这一道孤独。一起学习,一起进步。

1、异步编程是建立在委托基础上的编程方法
2、异步调用的每个方法都是在独立线程中执行的,因此本质上就是一种多线程程序。
3、比较适合在后台运行较为耗费时间的《简单任务》
4、如果后台任务要求必须按照特定顺序执行,或者访问特定的共享资源,则不适合使用异步编程,比较适合使用多线程编程。

下面的代码实现了不使用Thread,不使用Task实现异步编程
使用了IASyncResult接口和AsyncCallback委托
这里写图片描述

class Program
{
        public delegate int AddDelegate(int num);
        public static void Main(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中,与此同时会异步调用回调函数(有回调的情况下)。
            var re = addDel.EndInvoke(result);
            Console.WriteLine("Add2执行结果=" + re);
            Add1(1);
            Add1(5);
            Add1(10);
            Console.ReadLine();
        }

    public static int Add1(int a)
    {
        Console.WriteLine("开始ADD1");
        return a * a;
    }

    public static int Add2(int a)
    {
        Console.WriteLine("开始Add2");
        System.Threading.Thread.Sleep(5000);
        return a * a;
    }

    public static void Add3(IAsyncResult re)
    {
        var a = re.AsyncState;
        Console.WriteLine("执行回调=" + a);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

使用IAsyncResult接口实现异步调用

使用IAsyncResult接口实现异步调用 在.net framework中,许多I/O操作(文件I/O操作以及网络I/O)都提供异步版本的API,我们可以直接使用这些API来达到异步调用的目...
  • startwithdp
  • startwithdp
  • 2014年11月13日 18:34
  • 4298

C#(同步调用、异步调用、异步回调)

本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。   首先,通过代码定义一个委托和下面三个示例将要调用的方法:     ...
  • fstanwh
  • fstanwh
  • 2014年09月24日 13:48
  • 162

JS实现异步编程的几种方式

转载出处:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html Javascript异步编程...
  • sdfujichao
  • sdfujichao
  • 2016年08月09日 09:57
  • 1898

C#如何使用异步编程

原文:http://developer.51cto.com/art/201509/491619.htm 怎么使用异步,就是用委托进行处理,如果委托对象在调用列表中只有一个方法,它就可以异步执...
  • Joyhen
  • Joyhen
  • 2016年03月02日 13:48
  • 3565

[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 ...
  • lizhi3186575
  • lizhi3186575
  • 2013年12月20日 23:55
  • 1700

一个简单的异步操作

一、.net 2.0 以下的例子 首先来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,...
  • fuzhenglai
  • fuzhenglai
  • 2017年06月09日 08:48
  • 178

接口的使用,以及在异步任务中的使用

相信很多java和Android初学者,都对接口的定义有一些了解,但是如何使用它,利用它的特性来更好的实现自己想要的功能,却不甚了解。之前,我写代码也是没怎么用过接口,看到Android里,如监听方法...
  • chensong_5260
  • chensong_5260
  • 2016年05月07日 11:10
  • 955

C#异步编程模式IAsyncResult概述

IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 B...
  • haojingus
  • haojingus
  • 2013年09月13日 19:06
  • 561

5分种让你了解javascript异步编程的前世今生,从onclick到await/async

javascript与异步编程 为了避免资源管理等复杂性的问题, javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascri...
  • hj7jay
  • hj7jay
  • 2016年09月14日 14:05
  • 2176

《深入浅出Node.js》学习笔记——(四)异步编程

Node能够迅速成功并流行的原因: ①V8和异步I/O带来的性能提升 ②前后端JavaScript编程风格一致   4.1 函数式编程 4.1.1高阶函数 可以将函数作为参数,或是作为返...
  • oEternalFlame
  • oEternalFlame
  • 2016年05月30日 20:54
  • 1178
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IASyncResult接口实现简单异步编程
举报原因:
原因补充:

(最多只允许输入30个字)