C# 委托实现异步(有返回值,无返回值)

/// <summary>
        /// 异步方法(无返回值)
        /// </summary>
        public static void M1()
        {
            Console.WriteLine("开始执行耗时的异步方法");
            Thread.Sleep(5000);
            Console.WriteLine("异步方法执行完毕");
        }
        /// <summary>
        /// 异步方法(有返回值)
        /// </summary>
        /// <returns></returns>
        public static string M2()
        {
            Console.WriteLine("开始执行耗时的异步方法");
            Thread.Sleep(5000);
            Console.WriteLine("异步方法执行完毕");
            return "带返回值的异步方法执行完毕";
        }

        /// <summary>
        /// 回调方法
        /// </summary>
        /// <param name="iar"></param>
        public static void C1(IAsyncResult iar)
        {
            Console.WriteLine("执行回调方法");
        }

        /// <summary>
        /// 无返回值的委托
        /// </summary>
        public delegate void D1();
        /// <summary>
        /// 有返回值的委托
        /// </summary>
        /// <returns></returns>
        public delegate string D2();

        public static void test1()
        {
            Console.WriteLine("开始执行主方法");

            #region 执行无返回值的异步方法
            D1 delegate1 = new D1(M1);
            delegate1.BeginInvoke(new AsyncCallback(C1), null);//开启新的线程,执行异步方法
            #endregion

            #region 执行有返回值的异步方法
            //D2 delegate2 = new D2(M2);
            //IAsyncResult iar = delegate2.BeginInvoke(new AsyncCallback(C1), null);//开启新的线程,开始异步方法
            //string result = delegate2.EndInvoke(iar);//获取异步方法的返回值(此时是阻止当前线程的,相当于同步)
            //Console.WriteLine("异步方法返回的内容为---{0}", result);
            #endregion

            Console.WriteLine("主方法执行完毕");
            Console.ReadLine();
        }

无返回值异步方法执行结果:

有返回值异步方法执行结果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章