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

無返回值異步方法執行結果:

有返回值異步方法執行結果:

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