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);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshineyang1205/article/details/78872575

C# winform中使用IAsyncResult实现异步编程

c#,异步编程,IAsyncResult
  • castlooo
  • castlooo
  • 2010-07-08 23:33:00
  • 7192

使用IAsyncResult接口实现异步调用

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

C# 异步编程---IAsyncResult 接口

.NET Framework 为异步操作提供了两种设计模式:使用 IAsyncResult 对象的异步操作与使用事件的异步操作。先来学习前者 概述 IAsyncResult 异步设计...
  • neusoft06
  • neusoft06
  • 2013-04-18 10:39:18
  • 1716

C#中的异步调用及异步设计模式(一)

近期项目中使用了不少异步操作,关于“异步”做个总结。总结的内容大部分都来自于MSDN,还有一些自己的心得。 关于“异步”的使用可分为:使用层面和类库设计层面,细分如下: 一、使用异步方式调...
  • mashen1989
  • mashen1989
  • 2012-07-04 16:07:10
  • 751

C#使用多线程并发之异步委托IAsyncResult

使用委托开启多线程(多线程深入)1、用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程 BeginInvoke方法可以使用线程异步地执行委托所指向的方法。然后通过En...
  • qq_34057374
  • qq_34057374
  • 2017-07-31 17:40:13
  • 221

获取BeginInvoke的返回值/执行结果——AsyncCallback、IAsyncResult

来源于:http://www.c-sharpcorner.com/uploadfile/vendettamit/delegate-and-async-programming-C-Sharp-async...
  • emy_zj
  • emy_zj
  • 2017-03-14 17:10:19
  • 738

异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)

http://www.cnblogs.com/panjun-Donet/archive/2009/03/03/1284700.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前...
  • OnafioO
  • OnafioO
  • 2015-03-17 22:12:03
  • 1917

异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小结)

(一)让我们来看看同步异步的区别 同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果。 异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作。 .NET框架...
  • richnaly
  • richnaly
  • 2011-08-18 11:42:48
  • 13067

System.<em>IAsyncResult</em> 例子

//AsyncCallback 使用 <em>IAsyncResult</em> 接口获取异步操作的状态。综合评分:0 收藏评论举报 所需: 3积分/C币 下载个数: 16 开通VIP 立即下载 ...
  • 2018年04月14日 00:00

CS监听模式ReceiveCallBack(<em>IAsyncResult</em> AR)

(注意使用前先将IP改为自己的IP或127.0.0.1)本软件是使用套接字、ReceiveCallBack(<em>IAsyncResult</em> AR)函数为例的客服实例,修正了关闭客户端会导致异常的Bug;并且...
  • 2018年04月13日 00:00
收藏助手
不良信息举报
您举报文章:IASyncResult接口实现简单异步编程
举报原因:
原因补充:

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