ASP.NET溫故而知新學習系列之ASP.NET多線程編程—非同步編程(九)

來源:互聯網
上載者:User

  閱讀目錄

  一:同步處理

  二:非同步處理

  三:非同步委託

  四:通過委託同步調用方法

  五:通過委託非同步呼叫方法

  一:同步處理

   一個同步操作會阻塞整個當前的進程,直到這個操作完成才能執行下一段代碼

  

  二:非同步處理

   不會阻塞啟動操作的調用線程,調用程式必須通過輪流檢測,或者等待完成訊號來發現調用的完成

  

  三:非同步委託

   . 非同步委託通過以非同步方式調用同步方法的能力,在《同步調用WebService和非同步呼叫WebService》一文中,裡面也講過了,同樣一個Web服務,只是因為調用的方式不同,就成了同步調用和非同步呼叫了,同步就是直接調用

   . 當同步調用一個委託時,調用方法直接為當前線程的目標方法,這裡就是指GetNameFirst()方法,如果編譯器支援非同步委託,則它將產生BeginInvoke()方法和EndInvoke()方法

   . 只要是任何函數在我們的編譯器中,除了直接調用之外,還有一個非同步呼叫,也就是BeginInvoke()和EndInvoke(),BeginInvoke()返回結果是判斷執行是否完成,EndInvoke()返回調用結果

  四:通過委託同步調用方法

  class User
      {
          //要調用的動態方法
          public string GetNameFirst()
          {

       Thread.Sleep(30000);
              return "從小就犯困";
          }

          //要調用的靜態方法
          public static string GetNameSecond()
          {

              return "從小就犯困";
          }
     }

  //委託聲明(函數簽名)
      delegate string MyMethodDelegate(); 
      static void Main(string[] args)

  {

    User user = new User();
            //方式一:同步調用方法,聲明一個委託變數mydelegate,且綁定到動態方法GetNameFirst
            MyMethodDelegate my_delegate = new MyMethodDelegate(user.GetNameFirst);
            string strResult = my_delegate();
            Console.WriteLine(strResult);
            Console.ReadKey();

  }

  因為我們讓當前線程休眠的時間是30秒,所以我們要等到30秒後才能輸出“從小就犯困”  

  

  

  五:通過委託非同步呼叫方法

  using System.Runtime.Remoting.Messaging;

  delegate string MyMethodDelegate(); 
      static void Main(string[] args)

  {

    //方式二:非同步呼叫方法,聲明一個委託變數mydelegate,且綁定到動態方法GetNameSecond
        MyMethodDelegate my_delegate = new MyMethodDelegate(User.GetNameSecond);
        AsyncResult async_result;//此類封閉非同步委託非同步呼叫的結果,通過AsyncResult得到結果
        //開始調用
        async_result = (AsyncResult)my_delegate.BeginInvoke(null, null);
        //判斷線程是否執行完成
        while (!async_result.IsCompleted)
        {
                Console.WriteLine("正在非同步執行方法GetNameSecond()......");
         }
         Console.WriteLine("方法GetNameSecond()執行完成");
         //等待委託調用的方法的完成
         string strResult = my_delegate.EndInvoke(async_result);
         Console.WriteLine(strResult);
         Console.ReadKey();

   }

  

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.