IASyncResult接口实现简单异步编程(C#)

Posted 技巧窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IASyncResult接口实现简单异步编程(C#)相关的知识,希望对你有一定的参考价值。

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);    } }

在线电影网址:http://www.dy669.cn

以上是关于IASyncResult接口实现简单异步编程(C#)的主要内容,如果未能解决你的问题,请参考以下文章

.Net中的几种异步模式

多线程之异步编程: 经典和最新的异步编程模型,async与await

C#异步编程基础入门总结

c# 中的线程和同步

异步编程模型

C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!