码迷,mamicode.com
首页 > 其他好文 > 详细

同步,异步,回调例子

时间:2014-05-09 07:46:58      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   ext   

bubuko.com,布布扣
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Runtime.Remoting.Messaging;

namespace ConsoleApplication1
{    
    class Program
    {
        public delegate int AddDelegate(int op1, int op2);//声明AddDelegate委托

        /// <summary>
        /// 异步调用
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            YiBu();
            Console.ReadLine();
        }

        #region 同步
        /// <summary>
        /// 同步调用
        /// </summary>
        /// <param name="args"></param>
        static void TongBu()
        {
            AddDelegate addDelegate = new AddDelegate(delegate(int a, int b)
            {
                Thread.Sleep(5000);
                return a + b;
            });

            int result = addDelegate.Invoke(1, 2);
            //调用Invoke之后会在此处阻塞,后面的代码需要上面的代码执行完之后才能执行,这就是同步调用的坏处:用户体验不好。
            Console.WriteLine("此内容只能等到上面的方法执行完之后才会到这里!");
            Console.WriteLine(result);
        }
        #endregion

        #region 异步
        /// <summary>
        /// 异步调用
        /// </summary>
        /// <param name="args"></param>
        static void YiBu()
        {
            AddDelegate addDelegate = new AddDelegate(delegate(int a, int b)
            {
                Thread.Sleep(5000);
                return a + b;
            });

            IAsyncResult result = addDelegate.BeginInvoke(1, 2, null, null);//此处是两个null
            Console.WriteLine("eee");
            int m = addDelegate.EndInvoke(result);
            //异步在调用EndInvoke后会被阻塞,后面的代码也需要等待上面的代码执行完之后才能执行。
            Console.WriteLine("此结果需要上面的代码执行完之后才会出来:" + m);
        }
        #endregion

        #region 回调
        static void HuiDiao()
        {
            AddDelegate addDelegate = new AddDelegate(delegate(int a, int b)
            {
                Thread.Sleep(5000);
                return a + b;
            });
            AsyncCallback callBack = new AsyncCallback(AddComplete);
            IAsyncResult result = addDelegate.BeginInvoke(1, 2, callBack, "111111111");
            Console.WriteLine("此段会直接输出来。不用等待上面代码执行完。此种方式,用户体验号。");
        }
        static void AddComplete(IAsyncResult result)
        {
            AddDelegate handler = (AddDelegate)((AsyncResult)result).AsyncDelegate;
            Console.WriteLine(handler.EndInvoke(result));
            Console.WriteLine(result.AsyncState);
        }
        #endregion
    }
}
bubuko.com,布布扣

 相关文献:http://hi.baidu.com/smithallen/item/b1895d3779945cf02784f4b1

同步,异步,回调例子,布布扣,bubuko.com

同步,异步,回调例子

标签:style   blog   class   code   java   ext   

原文地址:http://www.cnblogs.com/pnljs/p/3717870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!