马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

c#同步、异步、异步回调示例

[复制链接]
查看3740 | 回复0 | 2015-9-7 09:24:28 | 显示全部楼层 |阅读模式
[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();
            //用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。
            //BeginInvoke最后一个参数@object传递额外的参数
            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;
        }
    }
     }


运行结果:

异步,委托,异步回调

异步,委托,异步回调







C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则