当前位置: 代码迷 >> C# >> 收拾 C#(同步调用、异步调用、异步回调)
  详细解决方案

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

热度:364   发布时间:2016-05-05 03:04:50.0
整理 C#(同步调用、异步调用、异步回调)

//闲来无事,巩固同步异步方面的知识,以备后用,特整理如下:

  class Program    {        static void Main(string[] args)        {            //同步调用 会阻塞当前线程,一步一步进行调用            Console.WriteLine("============同步调用线程:" + Thread.CurrentThread.ManagedThreadId+"============");            AddHandler _handler01 = AddMethod.Add;            int _result01 = _handler01(1, 2);            Console.WriteLine("继续做别的事情。。。");              Console.WriteLine("同步调用结果:"+_result01);            Console.WriteLine();              //异步调用 不会阻塞当前线程,会放到线程池里            //异步调用通过BeginInvoke和EndInvoke来实现(成对应用)。            Console.WriteLine("============异步调用线程:" + Thread.CurrentThread.ManagedThreadId + "============");            AddHandler _handler02 = AddMethod.Add;            IAsyncResult _result02 = _handler02.BeginInvoke(3, 8, null, null);            Console.WriteLine("继续做别的事情。。。");              Console.WriteLine("异步调用结果:"+_handler02.EndInvoke(_result02));            Console.WriteLine();            //用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。            [email protected]            Console.WriteLine("============异步回调 线程:" + Thread.CurrentThread.ManagedThreadId + "============");            AddHandler _handler03 = AddMethod.Add;            IAsyncResult _result03 = null;            _result03 = _handler03.BeginInvoke(9, 8, (IAsyncResult _ia) => { Console.WriteLine("异步回调结果:"+_handler03.EndInvoke(_result03)); }, null);            Console.WriteLine("继续做别的事情。。。");            Console.ReadKey();          }    }    public delegate int AddHandler(int _a,int _b);    public class AddMethod    {        public static int  Add(int _a, int _b)        {            Console.WriteLine("开始计算:" + _a + "+" + _b);              Thread.Sleep(3000);            Console.WriteLine("计算完成! 线程:"+Thread.CurrentThread.ManagedThreadId);              return _a + _b;        }    }     }

//运行结果,如图:

整理自:http://blog.csdn.net/wanlong360599336/article/details/8781477

1楼CodingNinja
我测试的和你不一样,发现第二、三种方式没区别!!!,
Re: 眯眼看世界
@CodingNinja,结果是一样,但是2.3种方法区别在于3比2多了回调的应用,3在异步开启时就定义好了方法,2异步开启后定义的方法。
  相关解决方案